2011-03-23 49 views
1

這個問題之前已經問過,主要是參考ListActivity,因此我一直無法使用他們的解決方案。 OTOH,我使用了一個正常的活動(由於其他UI元素),它包含一個gridview。當我爲某些網格項使用registerForContextMenu()時,不會爲這些特定項調用onitemclick()處理函數。setonitemclicklistener gridview項目使用時不工作registerForContextMenu

有人可以建議是否有一個簡單的解決方案呢?

我已經註冊使用

assetsListView.setOnItemClickListener(this); 

對於每一個(一些)的ImageView元素在網格中,我使用

registerForContextMenu(imgView); 

的onItemClick()被調用僅onItemClickListener()那些沒有註冊上下文菜單的項目。希望這可以幫助。

感謝, Rajath

+0

嗨,rajath你可以發佈你的代碼請 – 2011-03-23 07:16:50

+0

@Chirag,我已經添加了上面的代碼 – rajath 2011-03-23 08:14:15

回答

4

我註冊的每個項目onClick,文本菜單,並補充說,我可以用它來識別上下文菜單中推出的特定部件的標籤。

 registerForContextMenu(imgView); 
     imgView.setTag(asset.id); 
     imgView.setOnClickListener(this); 

當上下文菜單啓動後,我得到的標籤從窗口小部件,供以後使用:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{ 
    if (!(v instanceof ImageView)) 
     return; 

    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.add(0, v.getId(), 0, "Launch"); 
    assetIdViaContextMenu = (String) v.getTag(); 
} 

當在上下文菜單中的菜單項被點擊時,我用的是assetIdViaContextMenu知道哪個部件被提到︰

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
    if (assetIdViaContextMenu == null) 
     return true; 

    Asset asset = getAsset(assetIdViaContextMenu); 

    if (item.getTitle() == "Launch") 
    { 
.... 

此外,我不得不重寫取消上下文菜單。

@Override 
public void onContextMenuClosed(Menu menu) 
{ 
    assetIdViaContextMenu = null; 
    super.onContextMenuClosed(menu); 
} 

希望這可以幫助未來的人。如果您認爲我可以改進這一點,請告訴我。