我是一名试图从“活动”转移到“片段”的Android编程新手。
我有一个简单的蓝牙应用程序,包含3项活动:
这是MainActivity的屏幕截图,右上角有一个省略号菜单:
我正在尝试将我的应用更改为只有一个MainActivity,它会显示3个片段之一(MainFragment,SettingsFragment或ScanningFragment):
public class MainActivity extends Activity implements
MainListener, /* my 3 custom interfaces */
SettingsListener,
ScanningListener,
BleWrapperUiCallbacks {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // empty FrameLayout
Fragment fragment = new MainFragment();
getFragmentManager().beginTransaction()
.replace(R.id.root, fragment, "main")
.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Fragment fragment = new SettingsFragment();
getFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(R.id.root, fragment, "settings")
.commit();
break;
}
return super.onOptionsItemSelected(item);
}
我的问题是目前的"设置"菜单总是显示 - 我只需要在显示MainFragment时显示它(但是当显示SettingsFragment或ScanningFragment时不显示)。
如何最好地解决这个问题?
我是否必须引入一个枚举变量,我可以查询该变量以查找当前显示的3个碎片中的哪一个或是否有更好的方法?
答案 0 :(得分:1)
你可以覆盖应该有菜单的片段中的onCreateOptions菜单,并且只在那里充气。
在片段中:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.your_fragment_menu);
}
答案 1 :(得分:1)
在要显示菜单的片段中使用onCreateOptionsMenu()
,而不是在您的活动中。在其他片段中,您不想显示菜单,请使用setHasOptionMenu(false)
。
要获取当前片段,请使用findFragmentByTag()
FragmentManager