我有一个片段类扩展Fragment并调用setHasOptionsMenu参与菜单.这个类也实现了onCreateOptionsMenu,onPrepareOptionsMenu和onOptionsItemSelected.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
....
}
Run Code Online (Sandbox Code Playgroud)
我正在使用FragmentTransaction我的Activity(扩展FragmentActivity)动态加载这个片段.
但是没有调用任何菜单回调(onCreateOptionsMenu,onPrepareOptionsMenu和onOptionsItemSelected)(我在这些方法中调试了一些断点)并且未显示菜单.
我错过了什么吗?我需要在我的活动中添加一些内容吗?
我正在使用Android兼容性库,使用L11 SDK进行编译并在Xoom中进行测试.
编辑:我发现了问题.我的AndroidManifest目标是L11,这似乎隐藏了菜单按钮并阻止调用回调.但是,如果我从清单中删除它,我会丢失一些我需要的其他功能(例如列表中的激活状态).有没有人知道如何解决这个问题(启用菜单按钮)而不targetSdkVersion=11从清单中删除?
我应该如何访问片段中的操作栏菜单项?我试过这个,但什么都没发生
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.menu_refresh:
Toast.makeText(getActivity().getApplicationContext(), "clicked", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud) 我有一个有几个片段的应用程序.
只有A片段有一个选项菜单.可以从片段B(其扩展了listfragment)启动片段.
所以B片段没有选项菜单,如果我从中选择一个项目,片段A将通过选项菜单启动,如果返回,片段B仍然没有选项菜单.
问题是,如果我从导航抽屉中选择"设置"菜单(扩展了首选项碎片),而当前窗口是片段A,则会显示设置片段,其中包含片段A中的选项菜单.但是,如果我在导航抽屉中选择"设置"菜单,而我当前窗口片段B,C,D(没有选项菜单)一切正常.
片段A:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_station, menu);
}
Run Code Online (Sandbox Code Playgroud)
设置片段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
sharedPreferenceSettings = new SharedPreferenceSettings(getActivity());
addPreferencesFromResource(R.xml.settings);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_settings, container, false);
}
Run Code Online (Sandbox Code Playgroud)
问题出在哪儿?
编辑:
经过几个小时的调试,我找到了解决方案 问题是片段事务的fragmentManager不同.对于设置片段,我使用了getSupportFragmentManager(),对于其他人 - fragmentManager().这会导致一些碎片移动到后面的堆栈.
我正在尝试使用带有操作栏sherlock的SearchView支持v4版本.
所以我在操作栏中有我的搜索按钮 - >当我触摸它时键盘显示和搜索栏也是如此.
我的问题是我需要使用侦听器onQueryTextSubmit和onQueryTextChange但它们永远不会被触发.我需要使用searh查询字符串并使用它做自定义的东西.
这是完整的activity.java
public class ActivityMain extends SherlockFragmentActivity implements OnQueryTextListener, DialogFragmentListener {
/**
* PRIVATE ATTRIBUTES
*/
private static final String TAG = "ActivityMain";
private ViewPager _viewPager;
private TabsAdapter _tabsAdapter;
private DialogFiltre _dialogFiltre;
private String _searchCurrentQuery;
// data
private boolean _doubleBackToExitPressedOnce = false;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
switch ((int) _viewPager.getCurrentItem()) {
case 0:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
case 1:
getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu);
break;
case 2:
getSupportMenuInflater().inflate(R.menu.empty_menu, menu);
break;
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu …Run Code Online (Sandbox Code Playgroud) 如何使用 kotlin 在片段中添加选项菜单
class HomeFragment : Fragment() {
companion object {
lateinit var drawerLayout:DrawerLayout
lateinit var toolbar: android.support.v7.widget.Toolbar
private lateinit var toggle: ActionBarDrawerToggle
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val v = inflater.inflate(R.layout.fragment_home, container, false)
setHasOptionsMenu(true)
toolbar = v.findViewById(R.id.toolBar) as Toolbar
toolbar.inflateMenu(R.menu.menuhome)
drawerLayout = v.findViewById(R.id.drawer_Layout)
// Creating toggle
toggle = ActionBarDrawerToggle(activity, drawerLayout, toolbar,R.string.navigaionopen,R.string.drawerClosed)
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
return v
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when(item!!.itemId){
R.id.search -> {Toast.makeText(context,"Search",Toast.LENGTH_SHORT).show()} …Run Code Online (Sandbox Code Playgroud)