2012-05-07 45 views
1

我有一個TabHost與2片段,這兩個列表。 onCreateContextMenu適用於兩者,但onContextItemSelected均指向第一個Fragment類。我在XML文件中爲列表使用了不同的名稱,因此ID不一樣。與TabHost問題的上下文菜單

下面是代碼都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)); 
    } 

這裏onContextItemSelected的第一個片段,第二個是非常簡單,只是改變變種名稱相同的代碼。事實上,這並沒有改變任何問題,因爲這個方法只能在第一個片段上運行,即使我在第二個列表中。

@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,1)和(1,2)。也嘗試了兩個菜單。無。仍然不起作用。

感謝

+0

告訴我們,您註冊的每個列表的上下文菜單上面 – Barak

+0

OK,代碼嘿,如果我的回答可以幫助請點擊旁邊的選中標記它,使之接受的答案(並讓其他人知道您的問題/問題已解決/回答)。 – alexandrenofre

+0

編輯 – Barak

回答

0

對於tabhost(在我的經驗),你需要建立一個單一的onCreateContextMenu在爲tabhost的活動,並使用一個開關來獲得相應的菜單/動作。

例子:

// *************************************************************** 
// 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

好的,我在調用menu.add()時使用了order參數。謝謝! – alexandrenofre

+0

太好了。很高興我能幫上忙! – Barak