0

sqliteデータベースからデータをセットアップするlistViewを備えたアプリケーションを入手しました。私のCustomCursorAdapterは、(DBAdapterからの)データをリストビューに配置しています。選択したアイテムのアイテムIDをlistViewから取得したいのですが、次のコードで機能します。

listView.setOnItemClickListener(new OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> listView, View view, 
             int position, long id) {
           // Get the cursor, positioned to the corresponding row in the result set
           Cursor cursor = (Cursor) listView.getItemAtPosition(position);

           //Get it from the database.
           String countryCode = 
           cursor.getString(cursor.getColumnIndex(cursor.getColumnName(0)));
           Toast.makeText(getApplicationContext(),
             countryCode, Toast.LENGTH_SHORT).show();

           }
          });

そのコードはIDを取得し、IDを確認できるトーストを作成します。これは完全に機能します。次に、アイテムを長押しするコンテキストメニューに配置します(このメソッドは開始されません)。アイテムを操作するコンテキストメニューがありますが、リストビューで選択されているアイテムのIDを取得するだけで済みます。

これがコンテキストメニューのコードです。

     public boolean onContextItemSelected(MenuItem item) {

     Cursor cursor = (Cursor) listView.getItemAtPosition(position);


       String countryCode = 
       cursor.getString(cursor.getColumnIndex(cursor.getColumnName(0)));


      switch (item.getItemId()) {
              case CONTEXT_MENU_DELETE_ITEM:

               Toast.makeText(getApplicationContext(),
                     countryCode, Toast.LENGTH_SHORT).show();
                   return(true);
             case CONTEXT_MENU_UPDATE:

                   return(true);    
      }
  return(super.onOptionsItemSelected(item));
}

位置変数が設定されていないため、コンテキストメニューが機能しなくなりました。選択したアイテムの入手方法が本当にわかりません。

前もって感謝します。

4

3 に答える 3

1

これを使って

AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item .getMenuInfo();   
int positionSelected = menuInfo.position; 
于 2013-01-23T10:38:55.760 に答える
0

onItemClickを実装し、このリストビューをコンテキストメニューに登録するときに、onItemLongClickを実装するだけです。

ロングクリックでこれを介してインデックスを取得し、選択したIDを取得し、コンテキストメニューでこのIDを使用します。

別の方法は、このリンクのチェックアウトリンクです

http://progrnotes.blogspot.in/2010/10/android-context-menu-in-listview-after.html

これがメニューのスニペットコードです

@Override
 public boolean onContextItemSelected(MenuItem item) {

      AdapterView.AdapterContextMenuInfo info= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
      Long id = getListAdapter().getItemId(info.position);/*what item was selected is ListView*/

      switch (item.getItemId()) {
              case CONTEXT_MENU_DELETE_ITEM:
                    //do smth
                   return(true);
             case CONTEXT_MENU_UPDATE:
                   //do smth else)
                   return(true);   
      }
  return(super.onOptionsItemSelected(item));
}
于 2013-01-23T10:35:31.837 に答える
0

ListViewは、AbsListView.getCheckedItemIds()を介してこれを通知します

HTH

于 2013-01-23T10:36:48.147 に答える