2011-06-14 69 views
3

我知道这个问题已经被问及之前回答了,但我已经遵循多个教程无济于事。在Android中使用SimpleCursorAdapter填充列表视图

我只是想,如果我把我的代码,也许有人可以帮助,并指出我在正确的方向。我不会说谎,我在这方面是一个大规模的noob,但是到目前为止我都很喜欢它(当然,至少在这一点上)。所有这一切都发生的事情是,当我加载活动,它只是强制关闭并出现以下错误信息:

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, null, null, 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> 
+0

你尝试使用替代活动ListActivity? – 2011-06-14 19:18:34

+0

嗨,是的,我有。我是否认为如果活动中不止有一个列表,我需要使用Activity而不是ListActivity? 目前只有一个列表,但在XML中有一个文本框和按钮,因为我希望能够允许用户将自己的答案添加到列表中。 – javaMonkey 2011-06-14 19:36:00

回答

2

你所得到的错误是最有可能的,因为你试图嵌入一个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_1android.R.id.text1

+0

谢谢你们两位在发帖后这么快回复我,我真的很感激。我现在有下面的代码,我仍然得到一个强制关闭: 'ListView answerList =(ListView)findViewById(R.id.answerList); 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); answerList.setAdapter(cursorAdapter);' 我的错误信息: 您的内容必须有一个ListView,其id属性为'android.R.id.list' – javaMonkey 2011-06-14 20:04:08

+0

@javaMonkey:您是否将Activity更改为ListActivity?如果是这样,你只是稍微复杂一点。 – Squonk 2011-06-14 20:22:35

+0

很奇怪,现在我试图得到这个错误: '06-14 21:23:17.852:ERROR/AndroidRuntime(19652):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.magic8/com .example.magic8.AnswerList}:java.lang.NullPointerException'。我已经研究过这意味着什么,但我看不到任何导致它的事情。 – javaMonkey 2011-06-14 20:24:27

2

你往返需要被长度相同。您不需要在'from'数组中包含_id。请注意,您仍然需要在光标处添加_id。

+0

就像感谢你帮助我,我真的很感激! – javaMonkey 2011-06-14 20:11:02