Android开发之适配器-ListView适配器的重复数据
適配器是Android中的數(shù)據(jù)與View視圖的橋梁,作用就是將數(shù)據(jù)通過(guò)適配器顯示到對(duì)應(yīng)的View視圖上。
工作中,在用ListView做適配器數(shù)據(jù)時(shí)候,有些人肯定碰見(jiàn)過(guò),如何優(yōu)化效率,但是又出現(xiàn)重復(fù)數(shù)據(jù)的情況,如何避免重復(fù)數(shù)據(jù)而且又能提高ListView大數(shù)據(jù)量時(shí)候的效率呢?,解決方案就是2點(diǎn):
1. 在getView方法中 進(jìn)行View的判斷,即做convertView ==null 這樣的判斷,這樣是為了提高數(shù)據(jù)量大的時(shí)候的效率。
2.設(shè)置數(shù)據(jù)用setTag()/getTag()方法來(lái)進(jìn)行對(duì)數(shù)據(jù)的存取,這樣就可以防止數(shù)據(jù)的重復(fù)顯示了
通過(guò)以上兩點(diǎn)方法的處理,就可以達(dá)到較好的既提高顯示效率,又防止重復(fù)顯示數(shù)據(jù)的問(wèn)題。下面給出一個(gè)實(shí)現(xiàn)的案例:
主要核心解決方案就是紅色標(biāo)注的部分代碼。
package com.czm.adapter;import java.util.ArrayList;import android.R.integer; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView;import com.czm.entity.FileItem; import com.czm.xcfilemanager.R;/*** //設(shè)置sd卡的list適配器* @author jczmdeveloper**/public class SdcardListAdapter extends BaseAdapter{private LayoutInflater inflater;private Context context;private ArrayList listData;private boolean[] checkFlagList;static class ListItemView{ //自定義控件集合 public ImageView imageView; public TextView tvFileName;public TextView tvFileOther; public ImageView ivCheck;} public SdcardListAdapter(Context ctx,ArrayList list){this.context = ctx;this.listData = list;inflater = LayoutInflater.from(context);checkFlagList = new boolean[listData.size()];}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn listData.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub//自定義視圖ListItemView listItemView = null;if(convertView ==null){//獲取list_item布局文件的視圖convertView = inflater.inflate(R.layout.sdcard_list_item, null);listItemView = new ListItemView();//獲取控件對(duì)象listItemView.imageView = (ImageView) convertView.findViewById(R.id.ivFileLogo);listItemView.tvFileName = (TextView)convertView.findViewById(R.id.tvFileName);listItemView.tvFileOther = (TextView)convertView.findViewById(R.id.tvFileOther);listItemView.ivCheck = (ImageView)convertView.findViewById(R.id.ivCheck);//設(shè)置控件集到convertViewconvertView.setTag(listItemView);}else {listItemView = (ListItemView)convertView.getTag();}//設(shè)置文字和圖片FileItem fileItem = (FileItem) listData.get(position);listItemView.imageView.setImageResource(fileItem.getImageID());listItemView.tvFileName.setText(fileItem.getStrFileName().toString());listItemView.tvFileOther.setText(fileItem.getnFileSize()+fileItem.getStrDateTime().toString());if(checkFlagList[position]){listItemView.ivCheck.setImageResource(R.drawable.check);}else{listItemView.ivCheck.setImageResource(R.drawable.uncheck);}return convertView;}public void setCheckFlag(int position,boolean bChecked){checkFlagList[position] = bChecked;}public boolean getCheckFlag(int position){return checkFlagList[position];}public boolean[] getCheckFlags(){return checkFlagList;}}?
?
轉(zhuǎn)載于:https://www.cnblogs.com/JczmDeveloper/p/3760805.html
總結(jié)
以上是生活随笔為你收集整理的Android开发之适配器-ListView适配器的重复数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .Net精简版数据类型
- 下一篇: UPnP协议编程实践