对用于显示列表的 Textview 和 Listview 感到困惑
confused about Textview and Listview for displaying a list
我尝试了几种不同的布局以更深入地了解可能性和差异。
我从一个数组开始,在一个工作正常的列表视图中显示项目。
现在我想显示通过 JSON 从数据库中获取的项目。
我收到以下错误:您必须为 TextView 提供资源 ID
我使用了相同的 XML-文件,以前有效,这里是我的 all_products.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/mobile_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/colorPrimaryDark"
android:dividerHeight="1px">
</ListView>
</LinearLayout>
在我的 java class 中,我使用了之前用于数组适配器的代码,我只更改了应该显示的参数。这是我的一部分 AllProductsActivity.java
:
private void processValue(ArrayList<String> result) {
{
ArrayAdapter adapter = new ArrayAdapter<String>(AllProductsActivity.this, R.layout.all_products, result);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
}
结果来自我的异步任务。这里还有一个片段:
JSONArray jsonArray = new JSONArray(result.toString())
ArrayList<String> listdata = new ArrayList<String>();
for(int n = 0; n < jsonArray.length(); n++)
{
JSONObject object = jsonArray.getJSONObject(n);
listdata.add(object.optString("nr"));
}
return listdata;
protected void onPostExecute( ArrayList<String> result) {
pdLoading.dismiss();
processValue(result);
}
为什么我会收到错误消息?也许只使用一个 Textview 怎么样?当我搜索主题时,我发现人们使用 Textviews 而不是 Listview 的不同威胁。
编辑:所以我添加了另一个 xml 文件,mytextview.xml
<TextView android:id="@+id/mytext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/colorPrimaryDark"
android:dividerHeight="1px"
xmlns:android="http://schemas.android.com/apk/res/android">
并将适配器语句更改为以下内容:
ArrayAdapter adapter = new ArrayAdapter<String>(AllProductsActivity.this,
R.layout.mytextview,R.id.mytext , result);
ListView listView = (ListView) findViewById(R.id.mobile_list);
listView.setAdapter(adapter);
当您使用自定义布局时 R.layout.all_products
适配器不知道要从数据列表设置数据的视图
所以您只需要告诉适配器,要在其上设置数据的文本视图的 ID。
ArrayAdapter adapter = new ArrayAdapter<String>
(AllProductsActivity.this,
R.layout.all_products,R.id.your_text_view_id, result);
// ^^^^^^^^^ pass the text view ID
ArrayAdapter (上下文上下文,
内部资源,
int textViewResourceId,
T[] 个对象)
或
如果您只想显示您的数据而不需要任何自定义布局,那么可以在构建 android 资源布局中使用
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,result);
在实例化您的 ArrayAdapter
时,您提供的 ID 必须来自仅包含 TextView
的布局。这就是错误 You must supply a resource ID for a TextView
的意思
在 Pavneet 的第一个解决方案中注意:
资源: 是包含 textView 的资源而不是包含列表本身的 xml 文件(不是 R.layout.all_products)
textViewResourceId:资源中包含的textView的ID
我尝试了几种不同的布局以更深入地了解可能性和差异。 我从一个数组开始,在一个工作正常的列表视图中显示项目。
现在我想显示通过 JSON 从数据库中获取的项目。
我收到以下错误:您必须为 TextView 提供资源 ID
我使用了相同的 XML-文件,以前有效,这里是我的 all_products.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/mobile_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/colorPrimaryDark"
android:dividerHeight="1px">
</ListView>
</LinearLayout>
在我的 java class 中,我使用了之前用于数组适配器的代码,我只更改了应该显示的参数。这是我的一部分 AllProductsActivity.java
:
private void processValue(ArrayList<String> result) {
{
ArrayAdapter adapter = new ArrayAdapter<String>(AllProductsActivity.this, R.layout.all_products, result);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(adapter);
}
}
结果来自我的异步任务。这里还有一个片段:
JSONArray jsonArray = new JSONArray(result.toString())
ArrayList<String> listdata = new ArrayList<String>();
for(int n = 0; n < jsonArray.length(); n++)
{
JSONObject object = jsonArray.getJSONObject(n);
listdata.add(object.optString("nr"));
}
return listdata;
protected void onPostExecute( ArrayList<String> result) {
pdLoading.dismiss();
processValue(result);
}
为什么我会收到错误消息?也许只使用一个 Textview 怎么样?当我搜索主题时,我发现人们使用 Textviews 而不是 Listview 的不同威胁。 编辑:所以我添加了另一个 xml 文件,mytextview.xml
<TextView android:id="@+id/mytext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/colorPrimaryDark"
android:dividerHeight="1px"
xmlns:android="http://schemas.android.com/apk/res/android">
并将适配器语句更改为以下内容:
ArrayAdapter adapter = new ArrayAdapter<String>(AllProductsActivity.this,
R.layout.mytextview,R.id.mytext , result);
ListView listView = (ListView) findViewById(R.id.mobile_list);
listView.setAdapter(adapter);
当您使用自定义布局时 R.layout.all_products
适配器不知道要从数据列表设置数据的视图
所以您只需要告诉适配器,要在其上设置数据的文本视图的 ID。
ArrayAdapter adapter = new ArrayAdapter<String>
(AllProductsActivity.this,
R.layout.all_products,R.id.your_text_view_id, result);
// ^^^^^^^^^ pass the text view ID
ArrayAdapter (上下文上下文, 内部资源, int textViewResourceId, T[] 个对象)
或
如果您只想显示您的数据而不需要任何自定义布局,那么可以在构建 android 资源布局中使用
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,result);
在实例化您的 ArrayAdapter
时,您提供的 ID 必须来自仅包含 TextView
的布局。这就是错误 You must supply a resource ID for a TextView
的意思
在 Pavneet 的第一个解决方案中注意:
资源: 是包含 textView 的资源而不是包含列表本身的 xml 文件(不是 R.layout.all_products)
textViewResourceId:资源中包含的textView的ID