当前位置: 首页 > 面试题库 >

Android自定义Listview

贝研
2023-03-14
问题内容

我浏览了教程并进行了搜索,但仍然不明白该怎么做,

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方法将数据显示在指定位置。因此,当您设置适配器并滚动时,将调用listView的getView方法。

您在此处复制的方法是 EfficientAdapter 的一部分,可以优化ListView性能,并且可以使用 ViewHolder
模式进行优化。

从规格复制:仅需更多说明

position :项目在适配器的数据集中的位置(我们要查看其位置)。

convertView
:如果可能,要重用的旧视图。注意:使用前,您应检查此视图是否为非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?答:让我们以ApiDemos的Efficeint适配器为例。如果您的屏幕显示10行,那么,

convertView Count :10 +1 = 11(10行显示在屏幕上,另外一行显示滚动效果)。这意味着if(convertView ==
null){…}块中的语句将仅被调用11次。

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

注意:这仅适用于所提及的getView方法。



 类似资料:
  • 问题内容: 我想在锻炼应用程序中实现自定义RatingBar。条形图应具有4星,并且步长为1。布局如下所示: 我想用自定义图像替换默认的星星。但是,四颗星中的每一个都应该具有不同的图像: 星号1 =“ X”,表示“此项目已禁用” 星号2 =拇指朝下 星号3 =代表“中立等级”的事物 星号4 =大拇指 另外,例如,当该商品的等级为3(中性等级)时,所有其他星星(1,2和4)应显示其图像的灰色版本。

  • 我刚接触android,我被一些我认为很简单的东西弄糊涂了…我需要制作一个自定义searchView而不是在ActionBar/Toolbar中,而是在我的RelativeLayout中。问题是我不知道如何定制背景、文本输入颜色、XML中的搜索图标颜色,或者仅仅是它们的属性。此刻,我在我的电话,不能显示我的代码。有人告诉我如何定制吗?给我看任何我能看的教程?提前致谢!!!!

  • 不管怎样,关于我的问题:有人愿意编写一个非常、非常、非常、通用、直接和简单的自定义ArrayAdapter,该ArrayAdapter需要两个字符串值,可以与ListView一起使用吗?…或者,尝试调试我的尝试,希望找到我的问题所在。 任何帮助都很感激,谢谢。 我已经包括了我知道需要的代码,但我一直在与其他所有东西罢工。 错误:(20,9)错误:没有为ArrayAdapter找到合适的构造函数(上

  • 在自定义arrayAdapter中实现自定义getFilter时遇到问题。实际上,我不知道如何实现它。尝试了各种代码,但仍然没有成功。这是我的自定义阵列适配器。 这是ListTO课程。 这是布局图。 这里的搜索关键字来自“inputSearch”编辑文本。 这是文本更改的侦听器。 谢谢

  • 问题内容: 是否有任何已知的组合上,将给予一个民垫键盘有特殊字符如,,和。我试图允许用户输入一个数字,并且该字段也可以采用上述字符。我尝试了很多,但似乎都没有提供所需的输出。 为此,我需要创建自己的自定义键盘吗?由于我的要求非常特定于某些特殊字符,请不要将此问题标记为重复的问题。提前致谢。 问题答案: 您可以根据需要使用KeyboardView进行自定义。 其中 R.xml.customLayou

  • > 标高,同时具有自定义可绘制。 在用户触摸的地方启动涟漪效果。