android子视图无菜单,Android操作栏菜单项,actionLayout无法正常工作

嗨,我正在开发一个Android应用程序。 在我的应用程序中,我正在使用Sherlock动作。 我在动作栏中定义了几个菜单项,如下面的方式

和我的action_button看起来像:

现在一切都显示了,但我的问题是,当我点击card_menu item ,我定义子菜单,并定义动作布局。 它没有显示那些子菜单。 我的其他菜单项正常工作。 只有当我为包含子菜单的项目定义动作布局时,我才能显示子菜单。 如果我删除动作布局,它工作正常。

我知道如果我们为item定义动作布局,那么我们必须手动处理click侦听器。 我是按照以下方式做到的

final MenuItem item = menu.findItem(R.id.card_menu); item.getActionView().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onOptionsItemSelected(item); Toast.makeText(getActivity(), "click on menu", Toast.LENGTH_SHORT).show(); } });

我能够处理该项目的单击事件,但无法显示下拉子菜单项。

我该如何解决这个问题?

在您的活动中尝试此代码。

一定要正确设置你的

R.menu.menuidentifier

R.id.menuitemidentifier

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbarhelpmenu, menu); final Menu m = menu; final MenuItem item = menu.findItem(R.id.ActionConnection); item.getActionView().setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { m.performIdentifierAction(item.getItemId(), 0); } }); return true; }

接受的答案对我不起作用。 我的子菜单在不同的设备上表现不同。 在摩托罗拉Moto X上它是这样的:

jDp4p.png

您可以看到子菜单位置错误(我点击了ActionBar右侧的气泡图标)。

所以最后我提出了不同的解决方案:使用PopupMenu代替。 代码如下所示:

@Override public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.menu_fragment_chat, menu); final MenuItem item = menu.findItem(R.id.menu_item_actionbar_avatar); MenuItemCompat.getActionView(item).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showProfileMenuPopup(v); } }); } public void showProfileMenuPopup(View v) { PopupMenu popup = new PopupMenu(getActivity(), v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.menu_avatar_actions, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem menuItem) { return false; } }); popup.show(); }

它工作:)

完整的工作代码

码:

@Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.menu,menu); MenuItem item = menu.findItem(R.id.mSearch); ImageView iv= (ImageView) item.getActionView().findViewById(R.id.search_1); iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show(); } }); return true; }

请参阅答案

如果动作布局中有一个按钮,为了从菜单项获取回调,请不要忘记设置按钮

android:clickable="false"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值