android在使用ArrayAdapter时如何分配textViewResourceId

Posted

技术标签:

【中文标题】android在使用ArrayAdapter时如何分配textViewResourceId【英文标题】:How the textViewResourceId assigned by android while using ArrayAdapter 【发布时间】:2020-06-28 21:46:18 【问题描述】:

我是 android 新手,如果这很明显,请原谅我,我仍在努力了解工作流程。 我正在学习一个教程,并创建了一个 listView 和一个 ArrayAdapter。

ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,names);

然后我很好奇,看了一下 ArrayAdapter 的构造函数。在构造函数中,textViewResourceId 设置为 0

public ArrayAdapter(@NonNull Context context, @LayoutRes int resource,
            @NonNull List<T> objects) 
     //Here textViewResourceId is set to 0     
     this(context, resource, 0, objects);

然后我查看了android.R.layout.simple_list_item_1的来源。在这一点上,我预计 @android:id/text1 的 id 将是 0,但是当我检查它时,编辑器会显示public static final int text1 = 16908308

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_
    android:layout_
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

我这里出了点问题,任何人都可以简要解释一下这里发生了什么? 谢谢。

【问题讨论】:

如果未指定文本视图 ID,则假定指定的布局资源本身是TextView,如您所见on this line。您共享的布局就是这种情况,根视图是TextView。所以它不需要ID。 @Nicolas 非常感谢,我想我几乎同时找到了它。如果您要写回复,我可以将其标记为已接受的答案,这比接受我的要好:) 不,谢谢,我很高兴你能自己解决!答案经常在android代码中找到,你只需要看看。 【参考方案1】:

我进一步查看了源代码并找到了原因。如果这对任何人有帮助,我会很高兴。

       if (mFieldId == 0) 
            //  If no custom field is assigned, assume the whole resource is a TextView
            text = (TextView) view;
        else 
             //  Otherwise, find the TextView field within the layout
            text = view.findViewById(mFieldId);

【讨论】:

以上是关于android在使用ArrayAdapter时如何分配textViewResourceId的主要内容,如果未能解决你的问题,请参考以下文章

在android中使用arrayadapter类自定义listview

如何在 Android ArrayAdapter 中使用对象数组?

使用android中的自定义arrayadapter在listview中使用复选框检查后如何删除多个项目?

Android:将数据添加到 ArrayAdapter 时可见的 ListView 图像闪烁

android中自定义ArrayAdapter中的自定义getFilter

如何从 Android 中 ArrayAdapter 上的 ArrayList 更新项目