在使用ArrayAdapter时,android如何分配textViewResourceId



我是安卓系统的新手,所以如果这是一个明显的问题,请原谅我,我仍在努力理解工作流程。我正在学习一个教程,并创建了一个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将为0,但当我检查它时,编辑器显示public static final int text1 = 16908308

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

我这里出了点问题,有人能解释一下这里发生了什么吗?谢谢

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

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);

最新更新