Как накачать меню из фрагмента, перекрывающего активность - PullRequest
0 голосов
/ 10 июля 2019

У меня есть фрагмент меню, но оно не отображается так, как должно.Это может быть покрыто панелью инструментов деятельности

Как мне показать меню из меню фрагментов?Прямо сейчас тот, который показывает, из действия

полный код меню фрагмента

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, который имеет свое собственное меню.Как мне надуть это меню?

1 Ответ

2 голосов
/ 10 июля 2019

Возможно, вам придется переопределить onCreateOptionsMenu в вашем сообщении.Кроме того, вам может потребоваться 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);
}

Пока вы не сделаете это, ваше меню будетне будьте раздуты, и ваша деятельность никогда не сможет скрыть другое меню фрагментов .. Так что попробуйте !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...