我试图在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
以指定应用数组元素(值(填充的视图。但是,如果布局文件中只有一个视图,则无需指定第三个参数。