2012-05-07 21 views
1

私はTabHostに2つのフラグメント、両方のリストを持っています。 onCreateContextMenuは両方とも正常に動作しますが、両方のonContextItemSelectedは最初のFragmentクラスを指しています。私はXMLファイルのリストに異なる名前を使用しているので、IDは同じではありません。ここでTabHostを使用したコンテキストメニューの問題

は、第1はかなりちょうどVAR名の変更と同じコードで、最初のフラグメントのためonContextItemSelected両方onCreateContextMenu

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

     Map m = (HashMap) this.listView.getAdapter().getItem(itemID); 

     menu.setHeaderTitle(getString(R.string.options)); 
     menu.add(0, v.getId(), 0, activity.getString(R.string.delete)); 
    } 

そして、ここのコードです。実際には、このメソッドは最初のフラグメントでのみ実行されるため、これは何も問題には変わりません。これは、2番目のリストにあるときでもあります。

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     ContextMenuInfo menuInfo = (ContextMenuInfo) item.getMenuInfo(); 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
     int itemID = info.position; 
     Map m = (HashMap) this.listView.getAdapter().getItem(itemID); 
     processId = Integer.parseInt(m.get("processId").toString()); 

     activity.setSupportProgressBarIndeterminateVisibility(true); 
     runBackground(activity.getString(R.string.accessingECM), false, false, ACTION_REMOVE); 
     return true; 
    } 

これは、onActivityCreatedメソッドのコンテキストメニューに登録する方法です。 onCreateContextMenuは、両方のFragmentで機能することに注意してください。

listView = (ListView) this.view.findViewById(R.id.listProcess); 
     registerForContextMenu(listView); 

menu.add()の第1パラメータと第3パラメータを(1,1)と(1,2)に変更しようとしました。また、両方ともMenu.NONEにしようとしました。まだ動作しません。 (私の経験で)tabhostについては

おかげ

+0

それぞれのリストをコンテキストメニューに登録する場所を教えてください – Barak

+0

ok、上に編集されたコード – alexandrenofre

+0

私の回答が役に立ったら、その横のチェックマークをクリックして回答を受け入れてください/質問が解決/回答されました)。 – Barak

答えて

0

あなたはtabhostのための活動で単一onCreateContextMenuを設定し、適切なメニュー/アクションを取得するためにスイッチを使用する必要があります。

例:

// *************************************************************** 
// Create the various context menus depending on which list it is from 
// *************************************************************** 
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    switch (v.getId()) { 
    case R.id.list1: { 
     menu.setHeaderTitle("Tool CC Menu"); 
     menu.add(0, v.getId(), 0, "Edit/Add Cutter Comp Info"); 
     menu.add(0, v.getId(), 0, "Clear Cutter Comp Info"); 
     break; 
    } 
    case R.id.list2: { 
     menu.setHeaderTitle("WPC Menu"); 
     menu.add(0, v.getId(), 0, "Edit WPC Info"); 
     menu.add(0, v.getId(), 0, "Clear WPC Info"); 
     break; 
    } 
    } 
} 
// *************************************************************** 
// Create the various context menu actions based on which list 
// *************************************************************** 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    cc_id_int = (int) info.id; 
    if (item.getTitle() == "Edit/Add Cutter Comp Info") { 
     showDialog(CCEDIT_DIALOG_ID); 
    } else if (item.getTitle() == "Clear Cutter Comp Info") { 
     showDialog(CLEARCC_DIALOG_ID); 
    } else if (item.getTitle() == "Edit WPC Info") { 
     removeDialog(WPCEDIT_DIALOG_ID); 
     showDialog(WPCEDIT_DIALOG_ID); 
    } else if (item.getTitle() == "Clear WPC Info") { 
     showDialog(CLEARWPC_DIALOG_ID); 
    } 
    return super.onContextItemSelected(item); 
} 

・ホープ、このことができます!

+0

私は両方のタイトルが同じです。どの人が私に電話しているかをどのように知ることができますか? – alexandrenofre

+0

OK、menu.add()を呼び出すときにorder引数を使用しました。ありがとうございました! – alexandrenofre

+0

素晴らしい。お役に立てて嬉しいです! – Barak

関連する問題