我发现了很多同样的问题,但我真的不知道解决问题的方法。我有一个简单的Costumer parse.com类,并希望列出名称。 (所有这些。)
Logcat说:
05-02 19:31:46.534: E/ArrayAdapter(12816): You must supply a resource ID for a TextView
05-02 19:31:46.534: D/AndroidRuntime(12816): Shutting down VM
05-02 19:31:46.534: W/dalvikvm(12816): threadid=1: thread exiting with uncaught exception (group=0x41cd1700)
05-02 19:31:46.574: E/AndroidRuntime(12816): FATAL EXCEPTION: main
05-02 19:31:46.574: E/AndroidRuntime(12816): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
我认为我的ID存在问题。我之前从未使用过适配器。
// RemoteDataTask AsyncTask
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("Wait! Listing customers!");
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
"Customers");
// query.orderByDescending("_created_at");
try {
ob = query.find();
} catch (ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
listview = (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(MainActivity.this,
R.layout.activity_main);
for (ParseObject customer : ob) {
adapter.add((String) customer.get("name"));
}
listview.setAdapter(adapter);
mProgressDialog.dismiss();
}
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.csaba.noteapp.MainActivity"
tools:ignore="MergeRootFrame" >
<TextView
android:id="@+id/tvname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/etname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" />
<TextView
android:id="@+id/tvphone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Phone:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/etphone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/tvcity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="City:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/etcity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" />
<Button
android:id="@+id/buttonlist"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="List of customers" />
<Button
android:id="@+id/buttonadd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add costumer" />
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
答案 0 :(得分:0)
您正在ArrayAdapter
传递自定义布局。在这里,您应该传递要在其上显示文本的textview的资源ID。这就是为什么它会给出这个错误。
只需以这种方式调用适配器。
listview = (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(MainActivity.this,
R.layout.activity_main,R.id.tvname );
此处R.id.tvname
是activity_main.xml
中某个textview的ID。或者您可以创建自定义适配器。
答案 1 :(得分:0)
查看ArrayAdapter
public ArrayAdapter(Context context,int resource)
在API级别1构造函数
中添加参数context当前上下文。 resource a的资源ID 布局文件,包含在实例化视图时使用的TextView。
检查来源
http://androidxref.com/4.4.2_r2/xref/frameworks/base/core/java/android/widget/ArrayAdapter.java
查看第387
行,这正是堆栈跟踪所说的。您可以查看createViewFromResource
并了解会发生什么
您需要的是仅包含TextView的xml
row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
然后
adapter = new ArrayAdapter<String>(MainActivity.this,
R.layout.row);
您也可以拥有自定义适配器并自定义textview
同时检查此
"ArrayAdapter requires the resource ID to be a TextView" xml problems