微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Android自定义列表视图

我经历了教程和搜索,但我仍然无法理解,

getView(int position, View convertView, ViewGroup arg2)

扩展BaseAdapter在我的Android应用程序中创建自定义listView时,该方法有效.因此,我无法准确编辑自定义列表视图.

我需要知道这个方法何时调用以及参数的含义.

如果有人可以解释下面的方法很棒.谢谢

@Override
public View getView(int position, View convertView, ViewGroup arg2)
{

    ViewHolder holder;
    LayoutInflater inflater =  context.getLayoutInflater();

    if (convertView == null)
    {
        convertView = inflater.inflate(R.layout.listitem_row, null);                     
        holder = new ViewHolder();
        holder.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
        holder.txtViewDescription = (TextView) convertView.findViewById(R.id.textView2);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();                                        
    }

    holder.txtViewTitle.setText(title[position]);
    holder.txtViewDescription.setText(description[position]);



  return convertView;
}

解决方法:

getView():如规范中所述,getView方法显示指定位置的数据.因此,当你setAdapter并滚动listView时,将调用getView方法.

您在此处复制的方法是EfficientAdapter的一部分,用于优化ListView性能以及使用ViewHolder模式的优化.

从规格复制:只有更多的解释

position:项目在我们想要的视图项的适配器数据集中的位置.

convertView:如果可能的话,重用旧视图.注意:你应该检查一下
在使用之前,view是非null且具有适当的类型.如果无法转换此视图以显示正确的数据,则此方法可以创建新视图.异构列表可以指定它们的视图类型数,以便此View始终是正确的类型(请参阅getViewTypeCount()和getItemViewType(int)).

因此,在上面的方法中,当您执行以下操作时,您将重用convertView.

     if (convertView == null){
            ....
            convertView.setTag(holder);
     } else {
           holder = (ViewHolder) convertView.getTag(); 
      }

通过做以下事情,你避免查找(findViewById),这就是ViewHolder模式的好处

      holder.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);

parent:此视图最终将附加到的父级

编辑

问题:调用getView的次数以及创建的convertView数量是多少?
答:让我们举一个Efficeint Adapter from ApiDemos的例子.如果你的屏幕显示10行,那么,

convertView计数:10 1 = 11(10行你在屏幕上看到的,一个额外的显示滚动效果).这意味着if(convertView == null){…}块中的语句只会被调用11次.

getView Count:最初计数将为10,但是当你开始滚动计数时继续增加.每次都调用getView来更新数据.

注意:这仅适用于所提到的getView方法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐