将 3 点菜单实现到片段
Implement 3 dot menu to a fragment
大家好,我想在片段级别创建 3 点操作栏菜单,条件是我只想在 1 个片段而不是所有片段中显示该菜单,如果我在我的主 activity 中制作它们,然后我无法隐藏它们,所以这就是为什么我需要在片段级别制作它们。所以,到目前为止,我已经在我的片段上尝试过这段代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getActivity().getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.sync:
Toast.makeText(this, "Sync data...", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
但是它说方法 "onCreateOptionsMenu" 没有从它的超级 class 覆盖。
看来我错过了一些非常基本的东西,不知道是什么。
谢谢
这样试试
menu_filter.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" >
<item
android:id="@+id/action_filter"
android:title="@string/filter"
android:orderInCategory="10"
android:icon="@drawable/filter"
app:showAsAction="ifRoom" />
</menu>
片段的OnCreate方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
onCreateOptionsMenu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_filter.xml, menu); // Use filter.xml from step 1
}
onOptionsItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_filter){
//Do whatever you want to do
return true;
}
return super.onOptionsItemSelected(item);
}
希望对您有所帮助!
在可绘制“3 个点”的片段布局上放置一个 ImageButton。然后使用 PopupMenu 在单击该 ImageButton 时显示菜单。希望Shylendra给出的以下回答对您有所帮助:
删除 override
注释,因为它不允许你做 so.Or 尝试使用不同的 xml 菜单资源来克服这个 problem.Say main_menu
是给你的MainAcitivty
,main_frag1
是给你的Fragment
。
// Todo Three Dots Code.....
@Override
public void onPrepareOptionsMenu(Menu menu) {
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.minu_filter, menu);
menu.findItem(R.id.action_enter_manually).setVisible(true);
menu.findItem(R.id.action_validation_report).setVisible(false);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_enter_manually){
Log.e("keshav","Enter Manually");
Intent i=new Intent(getActivity(), EnterManually.class);
startActivity(i);
//Do whatever you want to do
return true;
}
if(id == R.id.action_validation_report){
Log.e("keshav","Enter Manually 7128");
Intent i=new Intent(getActivity(), DateWiseReportActivity.class);
startActivity(i);
//Do whatever you want to do
return true;
}
return super.onOptionsItemSelected(item);
}
----------------------------------------------------------------
menu_filter.xml
----------------------------------------------------------------
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/action_enter_manually"
android:icon="@mipmap/enter_manualy_48"
android:orderInCategory="10"
android:title="Enter Manually"
app:showAsAction="collapseActionView" />
<item
android:id="@+id/action_validation_report"
android:icon="@drawable/done"
android:orderInCategory="10"
android:title="Validation Report"
app:showAsAction="collapseActionView" />
</menu>
大家好,我想在片段级别创建 3 点操作栏菜单,条件是我只想在 1 个片段而不是所有片段中显示该菜单,如果我在我的主 activity 中制作它们,然后我无法隐藏它们,所以这就是为什么我需要在片段级别制作它们。所以,到目前为止,我已经在我的片段上尝试过这段代码
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getActivity().getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case R.id.sync:
Toast.makeText(this, "Sync data...", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
但是它说方法 "onCreateOptionsMenu" 没有从它的超级 class 覆盖。
看来我错过了一些非常基本的东西,不知道是什么。
谢谢
这样试试
menu_filter.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" >
<item
android:id="@+id/action_filter"
android:title="@string/filter"
android:orderInCategory="10"
android:icon="@drawable/filter"
app:showAsAction="ifRoom" />
</menu>
片段的OnCreate方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
onCreateOptionsMenu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_filter.xml, menu); // Use filter.xml from step 1
}
onOptionsItemSelected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_filter){
//Do whatever you want to do
return true;
}
return super.onOptionsItemSelected(item);
}
希望对您有所帮助!
在可绘制“3 个点”的片段布局上放置一个 ImageButton。然后使用 PopupMenu 在单击该 ImageButton 时显示菜单。希望Shylendra给出的以下回答对您有所帮助:
删除 override
注释,因为它不允许你做 so.Or 尝试使用不同的 xml 菜单资源来克服这个 problem.Say main_menu
是给你的MainAcitivty
,main_frag1
是给你的Fragment
。
// Todo Three Dots Code.....
@Override
public void onPrepareOptionsMenu(Menu menu) {
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.minu_filter, menu);
menu.findItem(R.id.action_enter_manually).setVisible(true);
menu.findItem(R.id.action_validation_report).setVisible(false);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_enter_manually){
Log.e("keshav","Enter Manually");
Intent i=new Intent(getActivity(), EnterManually.class);
startActivity(i);
//Do whatever you want to do
return true;
}
if(id == R.id.action_validation_report){
Log.e("keshav","Enter Manually 7128");
Intent i=new Intent(getActivity(), DateWiseReportActivity.class);
startActivity(i);
//Do whatever you want to do
return true;
}
return super.onOptionsItemSelected(item);
}
----------------------------------------------------------------
menu_filter.xml
----------------------------------------------------------------
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
android:id="@+id/action_enter_manually"
android:icon="@mipmap/enter_manualy_48"
android:orderInCategory="10"
android:title="Enter Manually"
app:showAsAction="collapseActionView" />
<item
android:id="@+id/action_validation_report"
android:icon="@drawable/done"
android:orderInCategory="10"
android:title="Validation Report"
app:showAsAction="collapseActionView" />
</menu>