2013-03-04 54 views
2

我有一个ListView适配器,根据行项目的类型设置不同的布局。回收具有不同行布局的ListView行

如果我使用一个持有人回收我的行,如下面的代码所示,我想我会得到一些错误,因为对于一个循环的行,我会得到最新的非循环行的布局,这可能不会属于同一类型。

我应该避免在这种情况下回收行吗?我还有什么其他选择?

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    MyHolder holder = null; 

    int type = getItemViewType(position); 

    if(row == null) 
    {   
     holder = new MyHolder(); 

     LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); 

     if(type == TYPE_1){ 
      row = inflater.inflate(R.layout.layout_type_1, parent, false); 
     } 
     else if(type == TYPE_2){ 
      row = inflater.inflate(R.layout.layout_type_2, parent, false); 
     }    
     else { 
      row = inflater.inflate(R.layout.layout_type_3, parent, false); 
     } 

     row.setTag(holder); 
    } 
    else 
    { 
     holder = (MyHolder)row.getTag(); 
    } 

    /* ... */ 
} 
+0

你是否重写getViewTypeCount和getItemViewType? – jimmithy 2013-03-04 16:16:20

+0

@jimmithy:是的,我做 – jul 2013-03-04 16:18:45

+0

回收RecyclerView和多行布局示例演示http://code2concept.blogspot.in/2015/10/android-multiple-row-layout-using.html回收处理回收站本身 – nitesh 2015-10-15 05:26:59

回答

5

始终回收行!您的getItemViewType(和getViewTypeCount)的实施指示ListView什么时候回收什么类型的视图,以避免混淆。

您的代码片段看起来不错。所以,这一切都应该工作。唯一稍微奇怪的部分是if(type == TYPE_3)。你的意思是if(type == TYPE_2)

问题是:你现在的代码有问题/例外吗?

+0

是的,如果(type == TYPE_3)是一个错字。谢谢。 – jul 2013-03-04 16:21:06

+0

@Streets Of Boston,很抱歉这种方式。这对我来说非常紧迫。请帮我看看这里https://stackoverflow.com/questions/47897770/issues-in-using-edittext-in-row-of-recyclerview-and-the-textwatcher-on-edittext?noredirect=1#comment82874592_47897770 – Shambhu 2017-12-23 13:27:00

2

如果我回收利用持有人行我的,如下面的代码,我 想我会得到一些错误,因为回收的行我会得到 布局最新的非循环排,这可能不是相同的 类型。

如果你指的是row == null检查,那么就没有问题,因为ListView将根据getItemViewType()方法给你正确convertView

如果您指的是MyHolder类,这又不成问题,因为持有人被设置为行视图的标记,并且如果ListView为您提供了正确的再循环行视图,则持有人标记也将具有适当的为该类型的行初始化字段。而且,由于您应该根据行类型处理MyHolder,因此您将访问已初始化的字段,这不是问题。您的MyHolder类应具有所有视图的引用,您的三种类型的行公开,以便您可以将它们放在哪里。

所以保持回收机制。

+0

是,我指的是行== null检查。感谢您的解释。我会接受波士顿街头的答案,因为他是第一个。 – jul 2013-03-04 16:24:26

+0

@Luksprog,对不起,这样ping。这对我来说非常紧迫。请帮助我在这里https://stackoverflow.com/questions/47897770/issues-in-using-edittext-in-row-of-recyclerview-and-the-textwatcher-on-edittext?noredirect=1#comment82874592_47897770 – Shambhu 2017-12-23 13:30:25