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 图像闪烁