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方法.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...