片段的菜单项 onClickListener
Posted
技术标签:
【中文标题】片段的菜单项 onClickListener【英文标题】:Menu Item onClickListener for fragments 【发布时间】:2016-12-30 22:31:17 【问题描述】:我有以下菜单:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
app:showAsAction="never"
android:title="Settings" />
<item android:id="@+id/menu_share"
android:icon="@drawable/ic_heart_outline_white_24dp"
app:showAsAction="always"
android:title="Favorite" />
</menu>
如何为此设置 onClick 侦听器?请记住,我的课程扩展了 Fragment:
public class My_Profile extends Fragment implements ....
...我不知道这是否有什么不同,但我已经在这个 java 文件中扩展了一个布局。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
myView = inflater.inflate(R.layout.testFragment, container, false);
...
更新 1
这是我在提出建议后尝试的,但似乎没有任何反应,有人可以告诉我我做错了什么:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
inflater.inflate(R.menu.menu_main, menu);
super.onCreateOptionsMenu(menu, inflater);
@Override
public boolean onOptionsItemSelected(MenuItem item)
int id = item.getItemId();
if (id == R.id.menu_share)
Log.d("ButtonClick", "button click worked");
return super.onOptionsItemSelected(item);
在 onCreate 中添加了这个:
setHasOptionsMenu(true);
更新 2
不知道这是否有什么不同,我目前只是在处理一个示例,菜单也像这样膨胀。我不知道这是否会影响其他两种方法:
mToolbar.inflateMenu(R.menu.menu_main);
更新 3
这是我现在尝试过的,但按钮单击仍然没有记录任何内容:
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState)
setHasOptionsMenu(true);
myView = inflater.inflate(R.layout.testFragment, container, false);
...
return myView;
只是为了测试重定向到我的其他活动之一,但仍然没有任何反应:
@Override
public boolean onOptionsItemSelected(MenuItem item)
int id = item.getItemId();
if (id == R.id.menu_share)
Intent myIntent = new Intent(getActivity(),LoginActivity.class);
startActivity(myIntent);
else
Intent myIntent = new Intent(getActivity(),SignupActivity.class);
startActivity(myIntent);
return super.onOptionsItemSelected(item);
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_main, menu);
【问题讨论】:
谁能帮忙?到目前为止没有任何解决方案有效 【参考方案1】:您的片段应该有这两种方法来处理菜单:onCreateOptionsMenu
和 onOptionsItemSelected
,后者带有 onClick 内容。
例如:
@Override
public boolean onOptionsItemSelected(MenuItem item)
int id = item.getItemId();
if (id == R.id.action_settings)
//TODO
else if (id == R.id.menu_share)
//TODO
return super.onOptionsItemSelected(item);
编辑
不要忘记setHasOptionsMenu(true)
为您的片段(谢谢)
【讨论】:
你忘了说片段的onCreate
或onCreateView
函数中需要调用setHasOptionsMenu(true);
。
@lionscribe 我使用 Google 并找到了 setHasOptionsMenu 属性,但仍然没有做任何事情。
您还必须覆盖onCreateOptionsMenu
方法,并扩充菜单。然后您在onOptionsItemSelected
中处理菜单【参考方案2】:
嗯,我认为你有一个很好的代码。
您需要做的就是重新安排onCreateOptionsMenu(...)
例如:
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
setHasOptionsMenu(true);
return inflater.inflate(R.layout.testFragment, container, false);
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_main, menu);
我希望这会有所帮助。
【讨论】:
我认为你不需要打电话给mToolbar.inflateMenu(R.menu.menu_main);
,因为菜单已经膨胀了onCreateOptionsMenu(Menu menu, MenuInflater inflater)
【参考方案3】:
@BadCodersHub 我已经尝试过您的方案,并且使用以下代码可以正常工作。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
setHasOptionsMenu(true);
View myView = inflater.inflate(R.layout.fragment_main, container, false);
return myView;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
super.onCreateOptionsMenu(menu,inflater);
inflater.inflate(R.menu.menu_main, menu);
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch (item.getItemId())
case R.id.action_settings:
Log.d("","action Settings Clicked !!");
break;
case R.id.menu_share:
Log.d("","action menu_share Clicked !!");
break;
default:
return super.onOptionsItemSelected(item);
return super.onOptionsItemSelected(item);
希望这会对你有所帮助。你需要重写 onCreateOptionMenu 和 onOptionItemSelected 方法
【讨论】:
我尝试了您的建议,但单击按钮时没有任何日志。我确实将菜单膨胀到 onCreate 中的工具栏,否则我看不到菜单 mToolbar.inflateMenu(R.menu.menu_main);这会有所作为吗以上是关于片段的菜单项 onClickListener的主要内容,如果未能解决你的问题,请参考以下文章