2014-03-29 118 views
2

我在导航抽屉适配器中遇到了一些问题。 它应该显示如下的项目: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

你的问题是与回收。当您向下滚动并备份时,不再需要使用小布局的视图,因此有资格进行回收 - 现在,该视图不为空,因此布局不会根据其位置重新初始化,而只需更新新的内容。

您可以通过在您的列表适配器类中使用ViewType来解决此问题,覆盖以下方法。

@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; 
} 
+0

非常感谢!这确实解决了我的问题。竖起大拇指 –