1

私はいつもそれをやったのと同じ方法でコードをやっています & どこが間違っているのかわかりません:

@Override
public void onCreate(){
   ...
   this.registerForContextMenu(lv);

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
   super.onCreateContextMenu(menu, v, menuInfo);
   MenuInflater inflater = getMenuInflater();
   inflater.inflate(R.menu.context_menu_device_item_remove, menu);
}

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:id="@+id/context_menu_item_remove_id"
           android:title="Remove" />
     <item android:id="@+id/context_menu_item_clear_all_id"
           android:title="Clear all" />
</menu>

ご覧のとおり、効果は次のとおりです。

ここに画像の説明を入力

AdapterContextMenuInfo.position の使用が原因で、3 番目または 4 番目の要素をクリックするとアプリがクラッシュします。

@Override
public boolean onContextItemSelected(MenuItem item) {
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
     System.out.println("## info.position: "+info.position);
...

これに遭遇したことがありますか?& どうやって逃げたの?

4

2 に答える 2

0

どうやらBUGはthis.registerForContextMenu(lv);(夕食のクラスの最初の1つ)の2つの呼び出しが原因だったようです..ええ、私の悪い。

于 2012-10-03T10:00:55.127 に答える
-1

次のコードを試してください。

     public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {

    menu.add(0, MENU_ITEM_SEND_MSG, 0, "Send a Message");
    menu.add(0, MENU_ITEM_MAKE_A_CALL, 0, "Make a Call");

}


     public boolean onContextItemSelected(MenuItem item) {

    SharedPreferences server_sp = getApplicationContext()
            .getSharedPreferences("server", MODE_PRIVATE);
    String server = server_sp.getString("Server", "server");

    switch (item.getItemId()) {
    case MENU_ITEM_SEND_MSG:
           //do ur stuff

    case MENU_ITEM_MAKE_A_CALL:

        //do ur stufff
        break;
    }
    return false;
}
于 2012-10-02T14:57:39.100 に答える