我在使用导航抽屉适配器时遇到了一些麻烦。 它应该按以下方式显示项目:Favorito,Categorias和分类下的小子类别。
我将导航抽屉适配器编程为默认使用big_layout.xml文件,但如果其位置大于某个值,则它使用small_layout.xml文件。
它适用于前几个项目,但问题是当我向下滚动以查看其余项目时,它们使用big_layout.xml,然后当我向上滚动时,原始大项目会更改其视图并使用小布局!
下面是代码,这是错误结果的屏幕截图:http://i.stack.imgur.com/QWwts.jpg
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
LayoutInflater laoutInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (getItemId(position)>3)
view = laoutInflater.inflate(R.layout.drawer_list_item_small, null);
if (getItemId(position)<=3)
view = laoutInflater.inflate(R.layout.drawer_list_item, null);
}
ImageView icon = (ImageView) view.findViewById(R.id.icon);
icon.setImageResource(drawerItems.get(position).getIcon());
TextView title = (TextView) view.findViewById(R.id.title);
title.setText(drawerItems.get(position).getTitle());
return view;}
我做错了吗? ,是否有一些缺失可能导致视图稳定?
我该如何解决这个问题?
答案 0 :(得分:0)
您的问题在于回收利用。向下滚动并向后滚动时,不再需要使用小布局的视图,因此有资格进行回收 - 现在,视图不为空,因此布局不会根据其位置重新初始化,而只是更新为新内容。
您可以使用列表适配器类中的ViewTypes来修复此问题,从而覆盖以下方法。
@Override
public int getItemViewType(int position) {
return (position > 3) ? 0 : 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
然后,在getView()
中,如果视图类型错误,则不会给出视图(用于回收)。
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
int layout = getLayoutForViewType(position);
view = LayoutInflater.from(parent.getContext()).inflate(layout, null);
}
...
return view;
}
private int getLayoutForViewType(int position) {
if (getItemViewType(position) == 0) {
return R.layout.blahblahblah;
}
return R.layout.bloobloobloo;
}