0

以下で解決

解決策については以下を参照してください


私はListView拡張するカスタムアダプタを持っていますCursorAdapter。ユーザーが[メソッドから起動された]ListViewの新しいアイテムをクリックすると、クリックされたアイテムの特定のアイテムに基づいた新しいアイテムが表示されます。newにはデータベースのフィールドが必要なので、これにアクセスしてから、のnewに渡す必要があります。ActivityopenDigitalBusinessCardActivityActivityListViewActivitymerchantIDActivityIntent

ListViewただし、クリックリスナーのフィードバックに基づいて、データベース内の正しいデータにアクセスする方法を理解できません。

EclipseBad request for field slotエラーが発生します。リスナーのコードは次のとおりです。

    list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
          // When clicked, show a toast with the TextView text
          Toast.makeText(getApplicationContext(), "Click registered!",
              Toast.LENGTH_SHORT).show();

          db = myDbHelper.getReadableDatabase();

          //Cursor cur = (Cursor) adapter.getCursor();            
          //cur.moveToPosition(position);
          Cursor cur = (Cursor) parent.getItemAtPosition(position);
          //Cursor cur = (Cursor)((MyCustomCursorAdapter) list.getAdapter().getItem(position));
          int merchantID = cur.getInt(cur.getColumnIndex("merchantID")); //Get the merchantID

          db.close();

         openDigitalBusinessCardActivity(merchantID);             
        }
      });

私のデータベース作成コードは次のとおりです。

private static final String DATABASE_CREATE = 
                "create table " + TABLE_SCORECARD + "(" 
                + COLUMN_MERCHANTID + " integer primary key, " 
                + COLUMN_MERCHANTNAME + " text not null, "
                + COLUMN_MERCHANTTAGLINE + " text not null, "
                + COLUMN_CURRENTSCORE + " Integer, "
                + COLUMN_FREEBIEPOINT + " Integer, "
                + COLUMN_CAMPAIGNID + " Integer, "
                + COLUMN_LISTPOSITION + " Integer);";

- -アップデート - -

テーブルに列を追加しましたが、 fromによるクエリは、のテストで何も返さない_idように見えます。したがって、kは有効なテーブル行番号を返していません。_idonItemClickcur.moveToFirst()falseonItemClic

list = getListView();

   list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
          // When clicked, show a toast with the TextView text
          Toast.makeText(getApplicationContext(), "Click registered!",
              Toast.LENGTH_SHORT).show();

          db = myDbHelper.getReadableDatabase();

          //Cursor cur = (Cursor) adapter.getCursor();            
          //cur.moveToPosition((int) id);
          //Cursor cur = (Cursor) parent.getItemAtPosition((int) id);
          //Cursor cur = (Cursor)((MyCustomCursorAdapter) list.getAdapter().getItem(position));
          Cursor cur = db.rawQuery("select merchantID from scoreCard where _id = "+id,null);
          if(cur.moveToFirst()) {
              //int merchantID = cur.getInt(cur.getColumnIndex("merchantID")); //Get the merchantID
              Toast.makeText(getApplicationContext(), "cur.moveToFirst returned true",
                      Toast.LENGTH_SHORT).show();
          }           

          cur.close();
          db.close();

         // openDigitalBusinessCardActivity(merchantID);              
        }
      });
4

2 に答える 2

1

Cursorベースのアダプタの場合、コールバックで取得idする行のがパラメータです。あなたはそれを使うべきです。onItemClickid

于 2012-05-05T09:15:42.483 に答える
1

解決した

_ idフィールドをテーブルに追加し、 onItemClickによって提供されたlong idフィールドをメソッドopenDigitalBusinessCardActivity(id);に渡しました。. openDigitalBusinessCardActivity (id);によって呼び出されるインテントにidを渡しました。. 次に、新しいアクティビティでidを使用してデータベースにクエリを実行しました。

私のテーブル:

private static final String DATABASE_CREATE = 
                "create table " + TABLE_SCORECARD + "(" + KEY_ROWID +" integer primary key autoincrement, "
                + COLUMN_MERCHANTID + " Integer, " 
                + COLUMN_MERCHANTNAME + " text not null, "
                + COLUMN_MERCHANTTAGLINE + " text not null, "
                + COLUMN_CURRENTSCORE + " Integer, "
                + COLUMN_FREEBIEPOINT + " Integer, "
                + COLUMN_CAMPAIGNID + " Integer, "
                + COLUMN_LISTPOSITION + " Integer);";

私のListActivityでは:

list = getListView();

   list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        Toast.makeText(getApplicationContext(),
            "Click ListItem Number " + id, Toast.LENGTH_LONG)
            .show();

        openDigitalBusinessCardActivity(id);
    }
   });
于 2012-05-06T06:00:02.077 に答える