android中的ArrayAdapter创建简单的listview

Posted

技术标签:

【中文标题】android中的ArrayAdapter创建简单的listview【英文标题】:ArrayAdapter in android to create simple listview 【发布时间】:2013-10-05 10:35:48 【问题描述】:

我尝试在 android 中创建一个 Activity,此 Activity 仅包含一个 ListView 没有其他内容。

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

为了了解 ArrayAdapter,我已阅读以下链接:

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

但还是看不懂!

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

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

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

Simple ListView using ArrayAdapter example.

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

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

编辑:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

在你的情况下,这将是:

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

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

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

【讨论】:

所以我从你的回答中了解到,如果我们正在制作一些复杂的 TextView 或自定义 TextView,我们需要提供 TextView 资源 ID,否则我们不需要它,或者我们可以使用 android 中提供的默认值.R.id.text1。我说的对吗? 没错。除非您尝试创建自己的视图,否则不需要它。 我可以使用 ArrayAdapter> (this, android.R.layout.simple_list_item1) 吗?因为在我的情况下,我想使用 HashMap 但没有合适的构造方法接受 hashmap。 ArrayAdapter 使用了一个通用参数,它可以是任何东西,但您仍然需要一个集合来支持适配器。由于在您的情况下,您想使用 HashMap,因此您必须从 BaseAdapter 构建您的自定义适配器 github.com/codepath/android_guides/wiki/…给你详细解释【参考方案2】:

但再次主要怀疑为什么它需要 TextView 资源 id?

查看构造函数和参数。

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

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

参数

context 当前上下文。

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

textViewResourceId布局资源中TextView的id 要填充的对象 ListView 中要表示的对象。

android.R.id.text1 指的是android资源中文本的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_1simple_list_item_1 是 android.R.layout 中的布局。

android.R.id.text1指的是android资源id。

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

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

【讨论】:

你能告诉我 int textViewResourceId 需要什么吗? 您希望显示字符串。所以你需要一个文本视图。适配器使用android资源包中的textview id。您还可以使用不同的 arrayadapter 构造函数,或者您可以拥有自己的自定义适配器【参考方案3】:

它需要的 TextView 资源 id 用于 TextView 布局文件,因此它不会在同一个活动中。

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

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

【讨论】:

【参考方案4】:
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

这里,resource 是指您在实例化视图时使用的 Layout 的“id”。

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

【讨论】:

【参考方案5】:
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

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

【讨论】:

【参考方案6】:

你不需要为 textview 使用 id。您可以通过android arrayadapter 了解更多信息。下面的代码初始化了arrayadapter。

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

【讨论】:

【参考方案7】:

对于您的问题,答案是 android.R.id.text1 是 int:要填充的布局资源中的 TextView 的 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);

这也是一个您可以更清楚地使用的有效代码。

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于android中的ArrayAdapter创建简单的listview的主要内容,如果未能解决你的问题,请参考以下文章

Android - ArrayAdapter:将 TextView 设置为 SQLiteDatabase 中的值

Android - ListView 中的 EditTexts 绑定到自定义 ArrayAdapter - 跟踪更改

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

Android_适配器(adapter)之ArrayAdapter

android在使用ArrayAdapter时如何分配textViewResourceId

片段中的 Android ListView ArrayAdapter 不起作用