我有一个菜单片段,但没有按预期显示。活动工具栏可能会覆盖它
如何从片段菜单中显示菜单?现在显示的是来自活动
片段菜单的完整代码
class Search : Fragment() {
var searchAdapter: SearchAdapter? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_search, container, false)
val toolbar = view.findViewById<Toolbar>(R.id.toolbar_search)
// placing toolbar in place of action bar
if(activity is AppCompatActivity){
(activity as AppCompatActivity).setSupportActionBar(toolbar)
}
val recyclerView = view.findViewById<RecyclerView>(R.id.search_result_tv)
val model = ViewModelProviders.of(this).
get(picodiploma.dicoding.database.picodiploma.dicoding.database.search.adapter.SearchView::class.java)
model.getData().observe(this, Observer {
resultsItem ->
val layoutManager = LinearLayoutManager(context)
recyclerView.layoutManager = layoutManager
searchAdapter = SearchAdapter((resultsItem as ArrayList<ResultsItem>?)!!, this.context!!)
recyclerView.adapter = searchAdapter
recyclerView.visibility = View.VISIBLE
})
return view
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.search, menu)
val searchItem = menu.findItem(R.id.search_)
val searchView = searchItem?.actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(s: String): Boolean {
return false
}
override fun onQueryTextChange(s: String): Boolean {
return false
}
})
}
}
完整的活动代码
public class BottomNavigation extends AppCompatActivity {
private static Fragment fragment = new Fragment();
private TvShow tvShow = new TvShow();
private FilmShow filmShow = new FilmShow();
private FavoritShow favoritShow = new FavoritShow();
private FilmFavoritShow filmFavoritShow = new FilmFavoritShow();
private Search search = new Search();
public static boolean isDeletedTv = false;
public static boolean isDeletedFilm = false;
private String title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bottom_navigation);
BottomNavigationView navView = findViewById(R.id.nav_view);
Toolbar toolbar = findViewById(R.id.toolbar);
// placing toolbar in place of action bar
setSupportActionBar(toolbar);
navView.setSelectedItemId(R.id.navigation_tv);
toolbar.setVisibility(View.VISIBLE);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
tvShow).commit();
fragment = tvShow;
title = "Tv";
if (isDeletedTv) {
FavoritShow FavoritTv = new FavoritShow();
navView.setSelectedItemId(R.id.navigation_favorit_tv);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
FavoritTv).commit();
fragment = FavoritTv;
title = "Favorit";
isDeletedTv = false;
} else if (isDeletedFilm) {
FilmFavoritShow FavoritFilm = new FilmFavoritShow();
navView.setSelectedItemId(R.id.navigation_favorit_film);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
FavoritFilm).commit();
fragment = FavoritFilm;
title = "Favorit Film";
isDeletedFilm = false;
}
BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelected;
navigationItemSelected = menuItem -> {
switch (menuItem.getItemId()) {
case R.id.navigation_tv:
toolbar.setVisibility(View.VISIBLE);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
tvShow).commit();
fragment = tvShow;
title = "Tv";
break;
case R.id.search_tv:
toolbar.setVisibility(View.GONE);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
search).commit();
fragment = search;
title = "Search Tv";
break;
case R.id.navigation_film:
toolbar.setVisibility(View.VISIBLE);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
filmShow).commit();
fragment = filmShow;
title = "Film";
break;
case R.id.navigation_favorit_tv:
toolbar.setVisibility(View.VISIBLE);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
favoritShow).commit();
fragment = favoritShow;
title = "Favorit";
break;
case R.id.navigation_favorit_film:
toolbar.setVisibility(View.VISIBLE);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
filmFavoritShow).commit();
fragment = filmFavoritShow;
title = "Favorit Film";
break;
}
toolbar.setTitle(title);
return true;
};
navView.setOnNavigationItemSelectedListener(navigationItemSelected);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container_bottomnav,
fragment).commit();
} else {
fragment = getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
if (fragment.isAdded()) {
getSupportFragmentManager().putFragment(outState, "fragment", fragment);
}
super.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_change_settings) {
Intent intent = new Intent(Settings.ACTION_LOCALE_SETTINGS);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
}
有一个活动BottomNavigation
,可以在选定底部导航栏以及菜单和标题时调用5个片段。我有一个名为Search
的片段,它具有自己的菜单。如何为该菜单充气?
答案 0 :(得分:2)
您可能必须覆盖自己的片段中的 onCreateOptionsMenu
。另外,您可能必须在片段oncreate中将 setHasOptionsMenu
设置为true,以使活动知道该片段具有自己的菜单:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Your menu needs to be added here
super.onCreateOptionsMenu(menu, inflater);
}
在执行此操作之前,您的菜单不会被夸大,您的活动也永远不会隐藏另一个片段菜单。.因此,请尝试一下!