ArrayAdapter in android 创建简单的列表视图



我试图在Android中创建Activity,此活动仅包含ListView没有其他内容。

据我所知,要填充列表视图,我们需要使用ArrayAdapter

因此,要了解ArrayAdapter,我已阅读以下链接:

http://developer.android.com/reference/android/widget/ArrayAdapter.html

但是我仍然无法清楚地理解它!

最大的疑问之一是为什么构造函数需要一个TextView资源 ID,而我的活动没有任何 TextViews,我应该给它什么?

并不是说这是唯一的构造函数,只是我无法理解它背后的逻辑。

为了创建一个简单的列表视图,我还参考了以下链接:

使用 ArrayAdapter 示例的简单列表视图。

但我的主要疑问是为什么它需要一个 TextView 资源 ID?

如果有人能用一个例子来解释它,那将非常有帮助。

编辑:

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

ArrayAdapter 使用文本视图来显示其中的每个项目。在后台,它使用它持有的每个对象的 toString() 方法,并在 TextView 中显示此方法。ArrayAdapter 有许多可以使用的构造函数,您在示例中使用的构造函数是:

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

默认情况下,ArrayAdapter 使用默认的文本视图来显示每个项目。但是,如果需要,可以创建自己的 TextView,并通过扩展 TextView 类来实现所需的任何复杂设计。然后,这必须进入布局供您使用。您可以在 textViewResourceId 字段中引用它,以将对象绑定到此视图,而不是默认对象。

为了您的使用,我建议您使用构造函数:

ArrayAdapter(Context context, int resource, T[] objects). 

在您的情况下,这将是:

ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values)

应该没问题。这会将每个字符串绑定到默认的 TextView 显示 - 纯白色和简单的白色背景。

因此,要回答您的问题,您不必使用textViewResourceId。

但再次主要怀疑为什么需要文本视图资源 ID?

查看构造函数和参数。

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

在 API 级别 1 构造函数中添加

参数

context 当前上下文。

resource 的资源 ID 布局文件,其中包含实例化视图时要使用的布局。

textViewResourceId 布局资源中文本视图的 ID 要填充的对象 要在ListView中表示的对象。

android.R.id.text1是指安卓资源中文本的ID。因此,您的活动中不需要有一个。

这是完整列表

http://developer.android.com/reference/android/R.id.html

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

this是指活动上下文

android.R.layout.simple_list_item_1 simple_list_item_1是安卓中的布局。R.布局。

android.R.id.text1是指安卓资源 ID。

values是您提供的链接中的字符串数组

http://developer.android.com/reference/android/R.layout.html

它所需的 TextView 资源 ID 用于 TextView 布局文件,因此它不会位于同一活动中。

您可以通过转到"新建> XML>XML布局文件">并在根标记字段中输入小部件类型(即"TextView"(来创建它。

来源:https://www.kompulsa.com/the-simplest-way-to-implement-an-android-listview/

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

在这里,资源表示您在实例化视图时使用的布局的"id"。

现在,此布局具有许多具有自己的 ID 的子视图。因此,textViewResourceId告诉我们需要使用数据填充哪个子视图。

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

我也是安卓新手,所以我可能是错的。但根据我的理解在将其用于列表视图创建时,第二个参数是列表项的布局。布局由许多视图(图像视图、文本视图等(组成。使用第三个参数,您可以指定要在哪个视图或文本视图中显示文本。

你不需要对文本视图使用 id。您可以从 android arrayadapter 了解更多信息。下面的代码初始化数组适配器。

ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables);

对于您的问题,答案是 android.R.id.text1 是 int:要填充的布局资源中文本视图的 ID。

ArrayAdapter 有很多具有不同参数数量的构造函数我提到了其中的一些

ArrayAdapter(Context context, int resource)
ArrayAdapter(Context context, int resource, int textViewResourceId)
ArrayAdapter(Context context, int resource, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

现在您可以了解每个构造函数都是不同的,它们使用了不同的参数列表。

简单的答案是,您可以在目标xml文件内或不使用文本视图的情况下使用ArrayAdapter。没关系。而且您不需要指定文本视图 ID,您可以在不使用它的情况下使用它。但是您可能需要使用一些高级选项来使用简单的列表视图,您必须使用文本视图。!

此处示例示例

ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.ListView,StringArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

这也是一个有效的代码,你可以更清晰地使用。

如果布局文件中有多个视图android.R.layout.simple_list_item_1则必须传递第三个参数android.R.id.text1以指定应用数组元素(值(填充的视图。但是,如果布局文件中只有一个视图,则无需指定第三个参数。

最新更新