0

What I am trying to do is display the contents of the database in a ListView. The layout contains a ListView which I have used and implemented but I can't seem to get them working together (or even the cursor), could someone give me a hand and an explanation of why my cursor implementation doesn't work?

I have a method to return the database entries as a Cursor:

public Cursor getAllRecords() {
     return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TEXT}, null, null, null, null, null);
 }

I have the class where I want to insert and display the database entries:

Button add;
EditText tM;
ListView generalList;
DBAdapter dba = new DBAdapter(this);

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_general);

        add = (Button) findViewById(R.id.button1);
        tM = (EditText) findViewById(R.id.editText1);
        generalList = (ListView) findViewById(R.id.generalList);

        Cursor c = dba.getAllRecords();
        c.moveToFirst();

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.id.generalList, c, new String[] {dba.KEY_TEXT}, new int[] {R.id.generalList}, 0);
            // This doesn't seem to work for me, I don't know how to fix it
            // or how to then get it working with the ListView

        generalList.setAdapter(adapter);

        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                insertIntoDatabase();
            }
        });
    }

 public void insertIntoDatabase() {
     dba.open();
     dba.insertRecord(textMessage.getText().toString());
     Toast.makeText(this, "Added:\n" + tM.getText().toString(), Toast.LENGTH_LONG).show();
     dba.close();
 }
4

3 に答える 3

1

CursorAdapter で ListView を使用する場合、列から返される Cursor には、各行を一意に識別する _id という名前の列が含まれている必要があります。フェッチしている 1 つの列 (dba.KEY_TEXT) の名前は「_id」ではないと推測しています。_id という名前のテーブルに列を追加するか、SELECT を実行するときにデータベースが名前を _id として返すようにすることができます。

すなわち

SELECT col_name as _id FROM my_table;

また

SELECT col_name _id FROM my_table;
于 2012-08-29T02:14:25.863 に答える
1

simplecursoradapter を受け取る引数については、受け取るレイアウトがリストビューではなく実際の項目のレイアウトであることを覚えておいてください。そこから R.id.generalList を削除します。これは、完全なレイアウトではなく、リストビューを識別した ID であるためです。それをテキストビューを含むレイアウトに置き換えます。ここで、int 配列には、必要なテキストを表示するテキストビューの ID が入り、文字列配列には、データベースから読み取られたレコード内のフィールドの名前が渡されます。aprian が述べたように行い、必要なだけアイテムをカスタマイズできることを知ってください。

于 2012-08-29T01:37:49.390 に答える
1

リストに 1 つしか含まれていない場合は、代わりに をTextView使用できます。android.R.layout.simple_list_item_1R.id.generalList

に変更new int[] {R.id.generalList}しますnew int[] {android.R.id.text1}

お気に入り :

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, c, new String[] {dba.KEY_TEXT}, new int[] {android.R.id.text1}, 0);
于 2012-08-29T01:25:47.827 に答える