2012-05-30 59 views
0

我有一個CustomListAdapter。我已經重載了我的OnItemClickListener,並添加了一個registerForContextMenu行來顯示我有一個上下文菜單的位置。Android ListView ContextMenu沒有出現

當我選擇應顯示MenuItem的項目時,會顯示菜單。當我按下手機上的後退按鈕時,菜單消失。然而,現在發生了什麼,我的列表視圖中的相同項目不再收到OnItemClickListener。我有道理嗎?我的意思是菜單消失後,相同的項目不會收到點擊監聽器。上面和下面的項目根據需要接收事件。我似乎菜單已經消失,但仍然捕捉點擊事件?

+2

把這裏一些代碼。 – Sajmon

+0

你在哪裏調用registerForContextMenu?我們需要代碼。 – mtmurdock

+0

我在OnItemClick重載函數中調用它。你能給我一個電子郵件地址,我會把你的文件發給你嗎? – AndroidDev

回答

0
 quickLinkListView.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) 
      { 

       Intent intent = new Intent(); 
       intent.setClassName(Home.this, "com.myapp.toc" + Constants.ACT_NAMES[position]); 

       if (position < 4 && position > 1) 
       { 

        switch (position) 
        { 

        case 3: 
         registerForContextMenu(v); 
         ViewHolder.v=v; 
         openContextMenu(v); 
         break; 
        } 
       } 

      } 
     }); 

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

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_home, menu); 
    menu.setHeaderTitle("Select Video Type"); 
} 
+0

上下文菜單第一次出現,當我按回菜單消失,但該項目第二次沒有收到點擊事件。 – AndroidDev

+0

將來,不要將其他信息作爲問題發佈。您應該編輯您的問題,並在原始問題後添加附加信息。這有助於維護StackOverflow的問答風格 – mtmurdock

+0

錯字:不作爲*回答* – mtmurdock

1

這很糟糕。您必須撥打registerForContextMenuonCreate方法。

因此,嘗試這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.contacts); 
    registerForContextMenu(<yourListView>); 
    ... 
} 

爲創建ContextMenu你必須重寫onCreateContextMenu方法

@Override 
public void onCreateContextMenu(ContextMenu cMenu, View parent, ContextMenu.ContextMenuInfo info) { 
    this.contextMenu = cMenu; 
    new MenuInflater(Contacts.this).inflate(R.menu.conmenu, this.contextMenu); 
} 

和選擇項目覆蓋onContextItemSelected方法:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)  item.getMenuInfo(); 
    switch (item.getItemId()) { 
     case R.id.c_odobrat: 
     deleteContactDialog(info.id); 
     return true; 
    } 
    return false; 
} 

它應該有效。