Скрыть вид поиска при изменении вкладки - PullRequest
0 голосов
/ 12 сентября 2018

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

@Override
        public void onTabSelected(TabLayout.Tab tab) {
            if(tab.getPosition() == 1)
                searchView.setVisibility(View.GONE);
            viewPager.setCurrentItem(tab.getPosition());
        }

Ниже мой код.

private void initialize(){
    setContentView(R.layout.activity_sec_main);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    NavigationDrawer navigationDrawer_fragment =
            (NavigationDrawer) getSupportFragmentManager().findFragmentById(R.id.mainfragmentdrawer);
    navigationDrawer_fragment.setup((DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
    final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.addTab(tabLayout.newTab().setText("Latest"));
    tabLayout.addTab(tabLayout.newTab().setText("Categories"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    viewPager = (ViewPager) findViewById(R.id.pager);
    adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

инициализация поискового представления

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.refresh_activity, menu);
    MenuItem itm = menu.findItem(R.id.action_search);
    searchView = (SearchView) itm.getActionView();
}

1 Ответ

0 голосов
/ 12 сентября 2018

Вы должны добавить оператор else к вашему onTabSelected, потому что если вы установите видимость один раз, он не вернется к своей первоначальной форме, так как это макет вкладки.Но сначала вам нужно установить Boolean, чтобы сообщить menuItem, должен ли он отображаться или нет.

private boolean searchViewShown = false;

@Override
public void onTabSelected(TabLayout.Tab tab) {
  if(tab.getPosition() == 1) {
     searchViewShown = false;
  } else {
     searchViewShown = true;
  }

  invalidateOptionsMenu();
  viewPager.setCurrentItem(tab.getPosition());
}

Обновление

Кажется, что ваш SearchView это пункт меню.В этом случае вам нужно добавить onPrepareOptionsMenu и установить здесь видимость вашего searchView, например:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem itm = menu.findItem(R.id.action_search);
    if (searchViewShown) {
        itm.setVisible(true);
    } else { 
        itm.setVisible(false);
    }
    return true
}

Затем добавьте invalidateOptionsMenu() всякий раз, когда вы выбираете вкладку, чтобы она вызывала onPrepareOptionsMenu и проверьте, будет ли отображаться ваш searchView.

...