2011-12-22 15 views
3

私は非常に単純なアクティビティをリストビューに基づいて作成しています。 リスト内の各項目にコンテキストメニューを追加したいので、registerForContextMenu(mListView)を呼び出しました。 その後、onCreateContextMenuonContextItemSelectedというメソッドを実装しました。 onContextItemSelectedが呼び出されていないようです

onCreateContextMenu作品

(コンテキストメニューが正しく表示されます)が、私は何も起こりません。このメニューの項目をクリックすると、コンテキストメニューがちょうど消え、それをチェックするために内部で onContextItemSelectedが呼び出されない方法は、(私はログを置きます)。

ListViewにもonItemClickListenerが添付されていることにご注意ください。

私は何かを忘れましたか?

ありがとうございます!

編集:私は、メニューを閉じたときに適切に呼び出されonContextMenuClosed()方法を、追加しました:ここにコード(私はいくつかの無関係なものを隠した)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mListView = new ListView(this); 
    mContacts = new Vector<Contact>(); 
    mAdapter = new ContactAdapter(this, mContacts); 
    registerForContextMenu(mListView); 
    mListView.setAdapter(mAdapter); 
    mListView.setOnItemClickListener(new OnItemClickListener() { 
    ... }; 
} 


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

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    Log.v("Contacts", "onContextItemSelected called"); 
    return super.onContextItemSelected(item); 
} 

EDIT 2です。

答えて

0

あなたのコードを見ることなく、私は正確な答えを与えることはできませんが、ContextMenuListenerを追加しようとすることができ、手動で

getListView().setOnCreateContextMenuListener(this); 
+0

私はコードを追加しました。私のメニューは表示され、onCreateContextMenuListenerが呼び出されます。しかし、私はまだ手作業で(あなたの方法で)それをやろうとしたが、それもうまくいかなかった。 –

0

このチェック削除:onCreateContextMenu(..)方法

から

if (v == mListView) { 
    ... 
} 

+0

私の実際のコードでは、これの "else"にログを追加します。そうすれば、メニュー作成部分のコードを入力しなかった場合には今すぐになります。しかし、やはり、メニューは正しく表示されるので正しく作成されます。 –

+0

申し訳ありませんが、あなたの質問に気付かなかった。 'mListView.setOnItemClickListener(new OnItemClickListener(){;};'? –

+0

これはどちらでも動作しません;-) –

15

ActionBarSherlockライブラリを使用して同じ問題が発生しました。

あなたがそのライブラリを使用している場合は、必ずandroid.view.MenuItemで正しいのMenuItemをインポートします。

それとも、このような方法のヘッダーに完全なパッケージを指定します。

public boolean onContextItemSelected(android.view.MenuItem item) {} 
+1

ありがとう!あなたは私に多くの時間を救った! – Andres

0

使用OnMenuItemClickListenerそれが仕事です。

関連する問題