hal*_*aya 1 android listview android-listview
这里有很多问题都有相同的标题.我仍然找不到解决方案.这就是我创建一个新原因的原因.我有一个导航抽屉和ListView.我对此ListView上的项目有两个自定义视图:标题和正常.我通过考虑他们的位置来给出每个项目的视图,但是当我上下滚动时,视图会随机混合.我将变量保存在ViewHolder上.它不可能是一个解决方案.我的适配器如下:
public class NavDrawerListAdapter extends BaseAdapter {
private Context context;
private ArrayList<NavDrawerItem> navDrawerItems;
public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems) {
this.context = context;
this.navDrawerItems = navDrawerItems;
}
@Override
public int getCount() {
return navDrawerItems.size();
}
@Override
public Object getItem(int position) {
return navDrawerItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private static class ViewHolder {
public ImageView icon;
public TextView title, count;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = new ViewHolder();
if (row == null) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (navDrawerItems.get(position).getType().equals("header")) {
row = mInflater.inflate(R.layout.drawer_list_item_header, null, false);
} else {
row = mInflater.inflate(R.layout.drawer_list_item, null, false);
}
} else {
holder = (ViewHolder) row.getTag();
}
holder.icon = (ImageView) row.findViewById(R.id.icon);
holder.title = (TextView) row.findViewById(R.id.title);
holder.count = (TextView) row.findViewById(R.id.counter);
holder.icon.setImageResource(navDrawerItems.get(position).getIcon());
holder.title.setText(navDrawerItems.get(position).getTitle());
if (navDrawerItems.get(position).getCounterVisibility()) {
holder.count.setText(navDrawerItems.get(position).getCount());
} else {
holder.count.setVisibility(View.GONE);
}
row.setTag(holder);
return row;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我有同样的问题,当快速滚动时,它会将某些项目的值与其他项目交替,就像某些项目的背景颜色随机变化一样.我通过搜索解决了这个问题,如果在适配器中使用ViewHolder,那么找到确切的解决方案就是在适配器中添加这两种方法
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4246 次 |
| 最近记录: |