android手機衛士06-girdview優化
ListView和GridView是我們經常會使用的控件,所以它們的效率是一個非常重要的事情,如果我們滑動的時候,會出現停頓的現在,那麼,這次是一個非常不好的體驗。所以我們有必要要對這些控件進行優化。
其實,我們用這些控件的時候,都是通過adapter來進行給這些控件添加item的,所以我們的優化也就是在adapter裏麵進行的。其實這個優化方法也很簡單,就是在進行view的繪製的時候,我們判斷一下,是不是已經繪製過啦,如果繪製過了,那麼就使用原來的,如果沒有繪製過,那麼就重新繪製。直接上代碼,大家可以與我們之前寫的那個adapter比較一下有什麼不同
com.xiaobin.security.adapter.MainUIAdapter
- package com.xiaobin.security.adapter;
- import android.content.Context;
- import android.content.SharedPreferences;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- import com.xiaobin.security.R;
- public class MainUIAdapter extends BaseAdapter
- {
- private static final String[] NAMES = new String[] {"手機防盜", "通訊衛士", "軟件管理", "流量管理", "任務管理", "手機殺毒",
- "係統優化", "高級工具", "設置中心"};
-
- private static final int[] ICONS = new int[] {R.drawable.widget01, R.drawable.widget02, R.drawable.widget03,
- R.drawable.widget04, R.drawable.widget05, R.drawable.widget06, R.drawable.widget07,
- R.drawable.widget08, R.drawable.widget09};
-
- private Context context;
- private LayoutInflater inflater;
- private SharedPreferences sp;
-
- public MainUIAdapter(Context context)
- {
- this.context = context;
- inflater = LayoutInflater.from(this.context);
- sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
- }
- @Override
- public int getCount()
- {
- return NAMES.length;
- }
- @Override
- public Object getItem(int position)
- {
- return position;
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- //convertView 相當於緩存一樣,隻要我們判斷一下它是不是為null,就可以知道現在這個view有沒有繪製過出來
- //如果沒有,那麼就重新繪製,如果有,那麼就可以使用緩存啦,這樣就可以大大的節省view繪製的時間了,進行了優化,使ListView更加流暢
- MainViews views;
- View view;
- if(convertView == null)
- {
- views = new MainViews();
- view = inflater.inflate(R.layout.main_item, null);
- views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
- views.textView = (TextView) view.findViewById(R.id.tv_main_name);
- views.imageView.setImageResource(ICONS[position]);
- views.textView.setText(NAMES[position]);
-
- view.setTag(views);
- }
- else
- {
- view = convertView;
- views = (MainViews) view.getTag();
- views.imageView = (ImageView) view.findViewById(R.id.iv_main_icon);
- views.textView = (TextView) view.findViewById(R.id.tv_main_name);
- views.imageView.setImageResource(ICONS[position]);
- views.textView.setText(NAMES[position]);
- }
-
- if(position == 0)
- {
- String name = sp.getString("lostName", "");
- if(!name.equals(""))
- {
- views.textView.setText(name);
- }
- }
-
- return view;
- }
-
- //==================================================================================
-
- //一個存放所有要繪製的控件的類
- private class MainViews
- {
- ImageView imageView;
- TextView textView;
- }
-
- }
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:andro >
-
- <item android:state_pressed="true" android:drawable="@drawable/title_background"></item>
- <item android:state_focused="true" android:drawable="@drawable/title_background"></item>
- <item android:drawable="@drawable/button_normal" /><!-- 這個是默認狀態下的 -->
- </selector>

- <Button
- android:
- android:layout_width="140dip"
- android:layout_height="40dip"
- android:background="@drawable/button_selector"
- android:text="@string/protectedYes"/>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:andro >
-
- <item android:state_pressed="true" android:drawable="@drawable/item_background_select"></item>
- </selector>
- <GridView
- android:
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:listSelector="@drawable/item_background_selector"
- android:verticalSpacing="8dip"
- android:layout_marginTop="10dip"
- android:numColumns="2" />

最後更新:2017-04-03 14:54:32