【问题标题】:Recycling ListView rows with different row layouts回收具有不同行布局的 ListView 行
【发布时间】:2013-03-04 16:09:39
【问题描述】:

我有一个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();
    }

    /* ... */
}

【问题讨论】:

标签: android android-listview adapter


【解决方案1】:

始终回收行!您对getItemViewType(和getViewTypeCount)的实现指示ListView 何时回收哪些类型的视图,以免混淆。

您的代码 sn-p 看起来不错。所以,这一切都应该工作。唯一有点奇怪的是if(type == TYPE_3)。你是说if(type == TYPE_2)吗?

问题是:您的代码现在有问题/异常吗?

【讨论】:

  • 是的,如果(type == TYPE_3) 是一个错字。谢谢。
  • @Streets Of Boston,抱歉以这种方式 ping。这对我来说非常紧急。请在这里帮助我stackoverflow.com/questions/47897770/…
【解决方案2】:

如果我使用支架回收我的行,如下面的代码所示,我 认为我会得到一些错误,因为对于回收的行,我会得到 最新未回收行的布局,可能不相同 输入。

如果您指的是row == null检查,那么没有问题,因为ListView会根据getItemViewType()方法为您提供正确的convertView。

如果您指的是MyHolder 类,这又不是问题,因为持有人被设置为行视图的标签,如果ListView 为您提供正确的回收行视图,那么持有人标签也将为该类型的行在其中初始化适当的字段。而且,您应该根据行类型处理MyHolder,这不是问题,因为您将访问已初始化的字段。您的 MyHolder 类应该包含对您的三种类型行公开的所有视图的引用,以便您可以将它们放在哪里。

所以保留回收机制。

【讨论】:

  • 是的,我指的是 row == null 检查。感谢您的解释。我会接受 Streets Of Boston 的回答,因为他是第一个。
  • @Luksprog,抱歉以这种方式 ping。这对我来说非常紧急。请在这里帮助我stackoverflow.com/questions/47897770/…
猜你喜欢
  • 2012-07-23
  • 2013-11-12
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
相关资源
最近更新 更多