2

のアイテムの ID が必要onContextItemSelected()です。次のコードを使用します。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    if (v.getId()==R.id.listView1) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        menu.setHeaderTitle("Optionen");
        menu.add(Menu.NONE, info.position, 0, "Artikel entfernen");
    }
}

@Override
public boolean onContextItemSelected(MenuItem item) {       
    final ListView lv = (ListView)findViewById(R.id.listView1);
    Toast.makeText(getApplicationContext(), lv.getItemAtPosition(item.getItemId()).toString(), Toast.LENGTH_LONG).show();
    return true;
}

varを!info.positionで読み取ることができませんでした。アプリは次のログでクラッシュしました: String empty。あなたは間違いを見つけることができますか?ありがとう!onContextItemSelecteditem.getItemId

更新 コードを次のように変更しました。

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo) {
    if (v.getId()==R.id.listView1) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle("Optionen");
    menu.add(Menu.NONE, info.position, 0, "delete post");
  }
}

@Override
public boolean onContextItemSelected(MenuItem item) {

  final ListView lv = (ListView)findViewById(R.id.listView1);
  //lv.getItemAtPosition(0).toString()


  AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();


  Toast.makeText(getApplicationContext(), info.position, Toast.LENGTH_LONG).show();
  //Toast.makeText(getApplicationContext(), lv.getItemAtPosition(item.getItemId()).toString(), Toast.LENGTH_LONG).show();


  return true;
}

しかし、このコードも機能しません (NotFoundException)。アイテムを含むリストビュー (R.id.listView1) があります。ユーザーが項目を長くクリックすると、コンテキスト メニューが表示されます。「投稿を削除する」オプションがあります。次に、投稿を削除するには、投稿の ID が必要です。

他の解決策はありますか?

UPDATE 2 私は問題を解決しました:

Toast.makeText(getApplicationContext(), lv.getItemAtPosition(info.position).toString(), Toast.LENGTH_LONG).show();
4

1 に答える 1

2

info.idid内の特定のアイテムに関連付けられた値になりAdapterViewます。

で取得するにinfoonContextItemSelected()、次を使用します。

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

また、アクション バーを備えたアクション モード (別名、コンテキスト アクション バー) が好まれて、コンテキスト メニューの人気が大幅に低下していることにも注意してください。

于 2012-10-26T06:32:24.620 に答える