2013-10-25 63 views
5

enter image description here創建的元素的點擊上下文菜單列表視圖項

點擊更多圖標內(3個垂直點固定在列表項的右側)開闢了谷歌音樂的上下文菜單:

enter image description here

我試圖重新創建這與我猜是一個上下文菜單。文件說:

如果你的活動使用一個ListView或GridView和你希望每個項目 提供相同的上下文菜單,通過傳遞的ListView或GridView控件registerForContextMenu註冊一個上下文菜單 所有項目()。

但我仍然希望列表項本身可點擊。我只想在用戶點擊Google音樂中的更多圖標時顯示上下文菜單。

所以,我想這一點:

@Override 
public void onMoreClicked(ArtistsListItem item, int position, View imageButton) {  
    registerForContextMenu(imageButton); 
} 

onMoreClicked僅僅是一個定製的監聽我做了,從列表中的適配器收到的onClick回調的一部分。

registerForContextMenu被調用,但永遠不會調用片段的onCreateContextMenu方法:

@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { //this method is never called 
    super.onCreateContextMenu(menu, view, info); 

    android.view.MenuInflater inflater = mActivity.getMenuInflater(); 
    inflater.inflate(R.menu.artist_list_menu, menu); 
} 

我跑到一些斷點檢查它是否正在運行,但它從來沒有。我對activity的onCreateContextMenu也做了同樣的事情(registerForContextMenu的類是片段,但我確信我是這麼做的),也沒有骰子。

我使用ActionBarSherlock,我不知道這是否有所作爲,但我想這是值得注意的。

有沒有人知道這裏發生了什麼?

+0

我認爲Google音樂不會使用上下文菜單,它看起來像它,但它可能是FragmentDialog,因爲它的動畫方式。但我不是100%肯定的,我還沒有看過你的代碼。 –

+0

嗯看起來不錯,但它可能是一個列表(和按鈕)爭取焦點的問題?你有沒有嘗試在按鈕中添加android:focusable =「false」? –

+0

看看這裏:http:// stackoverflow。com/q/3611551/2684 –

回答

2

我也有類似的問題,這是我落得這樣做:
在listAdapter.getItem我附加一個偵聽每個子視圖:

private Fragment mParentFragment; 

public FriendListAdapter(Fragment fragment, ...) { 
    . . . 
    this.mParentFragment = fragment; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(convertView == null){ 
     convertView = LayoutInflater.from(mContext).inflate(R.layout.friend_layout, parent, false); 
    } 
    ViewGroup viewGroup = (ViewGroup) convertView; 
    assert viewGroup != null; 

    * 
    * 
    * 

    Button viewMessageButton = (Button) viewGroup.findViewById(R.id.b_send_message); 
    viewMessageButton.setTag(friend.getHandle()); 
    viewMessageButton.setOnClickListener(mParentFragment); 
    return viewGroup; 
} 

,並在片段我只聽的onClick事件:

public class FriendListFragment extends Fragment implements View.OnClickListener { 
    @Override 
    public void onClick(View view) { 
     dialog.show(getActivity().getSupportFragmentManager(), SEND_MESSAGE_DIALOG); 
    } 
} 

或者您可以使用從支持V7這樣你可以在Android Studio中安裝不從項目結構的gradle窗口PopupMenu

左側選擇Modules,然後Import Library導航到..../android-studio/sdk/extras/android/support/v7/appcompat然後在你的主要項目模塊程序兼容性添加作爲一個模塊依賴。

+1

你最終什麼都不做? –

+0

意外發布太早;) – nana

+0

我假設你的解決方案的工作原理,但我也99%確定它不是真的需要,一個ListView可以點擊,並可以包含其他視圖可以顯示上下文菜單。 :-) –

相關問題