我尝试了一些不同的布局来深入了解可能性和差异。 我从一个数组开始,在listview中显示工作正常的项目。
现在我想通过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类中,我使用了之前用于数组适配器的代码,我只更改了应该显示的参数。这是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);
}
}
结果来自我的asynctask。这里也是一个片段:
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怎么样?在我搜索toppic时,我发现人们使用Textview而不是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);
答案 0 :(得分:3)
当您使用自定义布局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 (Context context, int resource, int textViewResourceId, T[] objects)
或
如果您只想显示没有任何自定义布局的数据,那么可以在构建android资源布局中使用
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,result);
答案 1 :(得分:1)
在Pavneet的第一个解决方案中,请注意:
资源:是包含textView的资源,而不是包含列表本身的xml文件(不是R.layout.all_products)
textViewResourceId :资源中包含的textView的ID
答案 2 :(得分:-1)
在实例化TextView
时,您提供的ID必须来自仅包含You must supply a resource ID for a TextView
的布局。这就是错误private void shareOrViewUrlViaThisApp(String appPackageName, String url) {
boolean found = false;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(intent, 0);
if (!resInfo.isEmpty()){
for (ResolveInfo info : resInfo) {
if (info.activityInfo.packageName.toLowerCase().contains(appPackageName) ||
info.activityInfo.name.toLowerCase().contains(appPackageName) ) {
intent.setPackage(info.activityInfo.packageName);
found = true;
break;
}
}
if (!found)
return;
startActivity(Intent.createChooser(intent, "Select"));
}
}
的含义