Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改选项卡时隐藏搜索视图_Android_Tabs_Searchview - Fatal编程技术网

Android 更改选项卡时隐藏搜索视图

Android 更改选项卡时隐藏搜索视图,android,tabs,searchview,Android,Tabs,Searchview,我有两个选项卡,一个选项卡包含新闻标题,另一个选项卡包含类别。用户只能搜索新闻标题。因此,当用户打开类别选项卡时,我想隐藏搜索视图。 我试过了,但没用 @Override public void onTabSelected(TabLayout.Tab tab) { if(tab.getPosition() == 1) searchView.setVisibility(View.GONE); viewP

我有两个选项卡,一个选项卡包含新闻标题,另一个选项卡包含类别。用户只能搜索新闻标题。因此,当用户打开类别选项卡时,我想隐藏搜索视图。 我试过了,但没用

@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();
}

您必须将
else
语句添加到
onTabSelected
中,因为如果设置一次可见性,它将不会返回到其原始形式,因为它是选项卡布局。但首先需要设置一个
布尔值来告诉菜单项是否应该显示它

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
似乎是一个菜单项。在这种情况下,您需要在PrepareOptions功能表中添加
,并在此处设置
搜索视图的可见性,如:

@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
,并检查您的搜索视图是否会显示。

FYI@NileshRathod,但我正在显示toast,它的工作方式不是隐藏搜索视图,而是在两种情况下都显示toastchange@teptis仍然没有隐藏一点工作,现在我在tab1上,当我点击search时,它正在工作,但在tab2上,当我按下search图标时,它会展开,但我无法键入任何内容。我还想隐藏搜索图标also@UbaidTanoli-看来View.GONE不起作用了。你可以试试我最新的答案。我对menuItem使用
setVisible(布尔)
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());
}