未调用java菜单片段类
我希望通过一个片段来控制我的菜单,以最小化代码
重复。我遇到的问题是,activity类在调试时接收调用,但它不会继续到Fragment
类。课程如下所示
我认为片段“参与”了布局生命周期 从片段继承时。我错过了什么
一些活动。爪哇
public class SomeActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().show();
setContentView(R.layout.a);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
public void chooseLanguage(View view) {
Intent intent = new Intent(this, AActivity.class);
startActivity(intent);
}
}
MenuFragment。爪哇
public class MenuFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
menuInflater.inflate(R.menu.main, menu);
super.onCreateOptionsMenu(menu, menuInflater);
}
public void startActivity(Class classs) {
Intent intent = new Intent(getActivity(), classs);
startActivity(intent);
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.a:
startActivity(AActivity.class);
return true;
case R.id.b:
startActivity(BActivity.class);
return true;
case R.id.c:
startActivity(CActivity.class);
return true;
case R.id.d:
startActivity(DActivity.class);
return true;
default:
return super.onOptionsItemSelected(menuItem);
}
}
}
# 1 楼答案
因此,解决方案包括
在活动的
onCreate
中添加片段getFragmentManager().beginTransaction().add(new MenuFragment(), "Menu fragment").commit();
根据文档,活动中的
onOptionsItemSelected
应该返回falseboolean Return false to allow normal menu processing to proceed, true to consume it here.
https://developer.android.com/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)
# 2 楼答案
从
Activity
的onCreateOptionsMenu()记录:因此,请确保返回true,而不是