选项卡更改时隐藏搜索视图
Hide search view when tab is changed
我有两个标签,一个标签包含新闻标题和其他类别。用户只能搜索新闻标题。所以我想在用户打开 类别 选项卡时 隐藏搜索视图 。
我试过了,但没有用!
@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();
}
您必须在 onTabSelected
中添加 else
语句,因为如果您设置一次可见性,它将不会恢复到原来的形式,因为它是一个选项卡布局。但首先你需要设置一个 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
似乎是一个 menuItem。在这种情况下,您需要添加 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
}
然后在您 select 一个选项卡时添加 invalidateOptionsMenu()
,以便它调用 onPrepareOptionsMenu
并检查您的 searchView 是否会显示。
我有两个标签,一个标签包含新闻标题和其他类别。用户只能搜索新闻标题。所以我想在用户打开 类别 选项卡时 隐藏搜索视图 。 我试过了,但没有用!
@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();
}
您必须在 onTabSelected
中添加 else
语句,因为如果您设置一次可见性,它将不会恢复到原来的形式,因为它是一个选项卡布局。但首先你需要设置一个 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
似乎是一个 menuItem。在这种情况下,您需要添加 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
}
然后在您 select 一个选项卡时添加 invalidateOptionsMenu()
,以便它调用 onPrepareOptionsMenu
并检查您的 searchView 是否会显示。