在Android中使用SimpleCursorAdapter填充listview

问题描述

| 我知道这个问题以前曾被问过和回答过,但是我遵循了多个教程都没有用。 我只是认为,如果我编写代码,也许有人可以帮助并指出正确的方向。我不会说谎,我是一个笨拙的菜鸟,但是到目前为止我仍然很喜欢它(嗯,无论如何到目前为止)。发生的一切是在我加载活动时,它强制关闭显示以下错误消息:
06-14 20:04:08.162: ERROR/AndroidRuntime(17605): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.magic8/com.example.magic8.AnswerList}: java.lang.UnsupportedOperationException: addView(View,LayoutParams) is not supported in AdapterView
所以,就在这里。我的数据库查询是:
public Cursor fetchAnswersList() {
    return mDb.query(DATABASE_TABLE,new String[] {KEY_ROWID,\"answer\"},null,null);    
}
然后我的列表查看代码
public class AnswerList extends Activity {

private Context context;
private DatabaseManager mDbHelper;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.answerlist);        

    Cursor answers = mDbHelper.fetchAnswersList();
    startManagingCursor(answers);

    ListView answerList=(ListView)findViewById(R.id.answerList);    

    String[] from = new String[] {\"_id\",\"answer\"};
    int[] to = new int[] {R.id.answerItem};
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(context,R.layout.list_item,answers,from,to);
    answerList.setAdapter(cursorAdapter);

    answerList.setonItemClickListener(
        new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
          // When clicked,show a toast with the TextView text
          setToast(\"Answer: \" + ((TextView) view).getText());
        }
    });
}
最后但并非最不重要的,这是我的XML:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
    android:layout_width=\"fill_parent\"
    android:layout_height=\"fill_parent\"
    android:orientation=\"vertical\">
    <LinearLayout 
        android:id=\"@+id/addAnswerForm\" 
        android:layout_height=\"wrap_content\" 
        android:layout_width=\"match_parent\" 
        android:orientation=\"horizontal\">
        <EditText 
        android:id=\"@+id/addAnswer\"
        android:layout_weight=\"1\" 
        android:layout_height=\"wrap_content\" 
        android:layout_width=\"wrap_content\">
            <requestFocus></requestFocus>
        </EditText>
        <Button 
        android:text=\"Add\" 
        android:id=\"@+id/addAnswer_btn\" 
        android:layout_width=\"wrap_content\" 
        android:layout_height=\"wrap_content\">
        </Button>
     </LinearLayout>
     <LinearLayout 
        android:id=\"@+id/answers\" 
        android:layout_height=\"match_parent\" 
        android:layout_width=\"match_parent\">
        <ListView 
        android:layout_weight=\"1\" 
        android:layout_height=\"wrap_content\" 
        android:id=\"@+id/answerList\" 
        android:layout_width=\"match_parent\">
        <TextView 
            android:id=\"@+id/answerItem\" 
            android:layout_height=\"match_parent\" 
            android:layout_width=\"match_parent\">
        </TextView>
    </ListView>
     </LinearLayout>   

</LinearLayout>
    

解决方法

        您收到的错误很可能是因为您试图将TextView嵌入到ListView中...
<ListView 
    android:layout_weight=\"1\" 
    android:layout_height=\"wrap_content\" 
    android:id=\"@+id/answerList\" 
    android:layout_width=\"match_parent\">
    <TextView 
        android:id=\"@+id/answerItem\" 
        android:layout_height=\"match_parent\" 
        android:layout_width=\"match_parent\">
    </TextView>
</ListView>
从ListView中删除TextView,然后尝试以下操作...
String[] from = new String[] {\"answer\"};
int[] to = new int[] {android.R.id.text1};
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(context,android.R.layout.simple_list_item_1,answers,from,to);
这使用了预定义的Android
android.R.layout.simple_list_item_1
android.R.id.text1
    ,        您的往返距离必须相同。您不需要在\'from \'数组中包含_id。请注意,您仍然需要在光标中包含_id。