2010-11-18 25 views
2

もう1つの初心者の質問です。私は、ユーザーが項目を上下に動かしたり、項目を削除することを許可するListViewに適用するコンテキストメニューを持っています。Androidのコンテキストメニューを非表示にする項目

私はonContextItemSelected()のコードがリストの上や下を通過することを防ぐためにコードを持っていますが、(たとえば)トップアイテムリストの中の1つが選択されます。

私はonCreateContextMenuでこれを行う必要があると仮定しますが、どうすればよいか分かりません。ここで

は私onCreateContextMenuコードです:

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

おかげで、
WTS

答えて

2

コンテキストメニューがListViewのために開かれている場合、menuInfoはあなたについての情報を与えるタイプAdapterContextMenuInfoのオブジェクトを、含まれていますリスト内のどの項目がクリックされたかを示します。最初または最後の項目の場合は、コンテキストメニューから対応する項目を削除するだけで済みますが、項目が残っていないとどうなるかわかりません。

+1

今後の検索では... adapterContextMenuInfoを使用するadapterInfo =(AdapterContextMenuInfo)menuInfo; –

+0

そして、どの行にコンテキストを求められたかに基づいて特定の項目のコンテキストメニューを表示したくない場合は、メニューを膨張させる前にonCreateContextMenu()を戻してください。 –

11

onCreateContextMenuメソッドでは、潜在的に非表示にするメニュー項目を取得し、リストの位置に基づいて表示されないように設定する必要があります。あなたがしたい場合は、特定の項目を無効にすることができます

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 

if(info.position < 1) { 
    myLocationMenuItem = menu.findItem(R.id.myLocation); 
    myLocationMenuItem.setVisible(enable); 
} 
1

:このような

何か。

@Override 
     public void onCreateContextMenu(ContextMenu menu, View v, 
       ContextMenuInfo menuInfo) 
    { 
       AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 

       int position = info.position; 

       // use this position to decide your item clicked 

       menu.clear(); 
       menu.setHeaderTitle("Context Menu Title"); 
       String[] menuItems = getResources().getStringArray(
         R.array.menu_context); 


       for (int i = 0; i < menuItems.length; i++) 
       { 
        menu.add(Menu.NONE, i , i, menuItems[i]); 
       } 
       menu.getItem(0).setEnabled(**Conditional check**); 
       menu.getItem(1).setEnabled(**Conditional check**); 
       menu.getItem(2).setEnabled(**Conditional check**); 
    } 
3

これは私が行ったように、誰かがそれを求めているだけの場合にはPopupMenuのためのソリューションです。ここで私はPopupMenuためmenuレイアウトファイル内の3つのボタンを持っていると私はいくつかのケースでは、それらのいくつかを削除します。

PopupMenu popup = new PopupMenu(this, this.actionButton); 
    popup.setOnMenuItemClickListener(this); 
    MenuInflater inflater = popup.getMenuInflater(); 
    inflater.inflate(R.menu.menu_resume_view, popup.getMenu()); 

    Menu menu = popup.getMenu(); 
    if (this.resume.isPublished()) { 
     menu.removeItem(R.id.menu_button_publish); 
    } 
    else { 
     menu.removeItem(R.id.menu_button_unpublish); 
     menu.removeItem(R.id.menu_button_update_publish_date); 
    } 

    popup.show(); 

あなたがPopupMenuonPrepareOptionsPanelを使用する場合は呼び出されません。メニュー項目をPopupMenuを作成している間にidで取得し、それらを削除する必要があります。特定のケースでは使用できないはずです。

+0

こんにちはすべてのアイデアアイコンだけを使用している場合、どのようにタイトルスペースを削除できますか? https://gist.github.com/mediavrog/9345938 –

関連する問題