4

ユーザーのリマインダーデータ(リマインダー名、メモ、日付、時刻など)を追跡するデータベースがあります。最初の列は主キー(_ID)です。ListViewはデータベースから入力され、次のようにリマインダーの名前が付いた単純な行のセットを表示します。


ごみを出す。


犬の散歩。


ランチを食べる。



今私の質問は、どの特定のリマインダーがクリックされたかをアプリに認識させるにはどうすればよいですか?行がクリックされたら、データベースからその主キー(_ID列)を見つけて、その行のすべてのデータを取得できるようにする必要があります。

これまでのところ、クリックを検出するにはonItemClickを使用する必要があることを知っています。しかし、クリックされたアイテムの主キー値(_ID)を取得するにはどうすればよいですか?私の現在のコードは次のようになります。

final Context context = this;

//DB Connectivity variables.
protected RemindersDAO remindersDAO;
protected SimpleCursorAdapter remindersCursorAdapter;
public ListView viewRemindersListView;

@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_local_reminders);

    // Get rid of the app title in the action bar.
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(false);

    viewRemindersListView = (ListView) findViewById(R.id.listview_view_local_reminders);

    remindersDAO = new RemindersDAO(this);
    Cursor cursor = remindersDAO.all(this);

    remindersCursorAdapter = new SimpleCursorAdapter(this,
                                     R.xml.view_reminders_item_layout,
                                     cursor, new String [] { RemindersDAO.NAME },
                                     new int[] { R.id.view_reminders_item_text } );

    viewRemindersListView.setAdapter(remindersCursorAdapter);
}

@Override
public void onItemClick(AdapterView<?> listView, View view, int position, long arg3) {
    remindersDAO = new RemindersDAO(this);
    Cursor cursor = remindersDAO.all(this);

    int idColIndex = cursor.getColumnIndex(RemindersDAO._ID); 
    int rowId = cursor.getInt(idColIndex); 
}

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    // TODO Auto-generated method stub
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.activity_view_local_reminders, menu);

    return super.onCreateOptionsMenu(menu);
}

public boolean onOptionsItemSelected(MenuItem item) {
     //Set the classes that are called from each actionbar item.
     switch (item.getItemId()) {
         case R.id.local_reminders_actionbar_go_advanced:
             Intent i=new Intent(this, AdvancedNewReminder.class);
             startActivity(i);
             return true;
         case R.id.local_reminders_actionbar_simple_reminder:
             Intent k = new Intent(this, QuickNewReminder.class);
             startActivity(k);
             return true;

             /* case R.id.local_reminders_actionbar_google_tasks:
             showGoogleTasksBetaDialog();
             return true; */

     }
     return false;
 }

@Override
public void onBackPressed() {
    return;
}

}

ご協力ありがとうございます!

4

1 に答える 1

5

メソッドでは、onItemClick3番目のパラメータを確認できます-データベース内です。つまり、クリックしたアイテムIDを取得するだけです。long idid

  @Override
    public void onItemClick(AdapterView<?> listView, View view, int position, long arg3) {
       Log.d("Clicked item id", " "+ arg3); 
    }

他のフィールドが必要な場合は、クリックしたアイテムのカーソルを取得する必要があります

   @Override
    public void onItemClick(AdapterView<?> listView, View view, int position, long arg3) {
     Cursor item=   (Cursor) reminderCursorAdapter.getItem(position);
Log.d("Clicked item field", " "+ item.getColum(your colum index)); 
    }
于 2012-09-19T01:28:18.467 に答える