所以..我的Fragment
包含ViewPager
,其中还有两个Fragments
,用作搜索标签。这意味着3个不同的Java类,1个用于容器,2个用于内容。
我想要的行为是:当用户按下搜索按钮,输入内容并在基础Activity
中提交搜索时,应用会覆盖onQueryTextSubmit
以启动寻呼机Fragment
和在那里获取查询以直接搜索寻呼机中的第一个Fragment
。当用户滑动到下一个Fragment
时,SearchView会及其查询一直存在,并使用所述查询在第二个Fragment
上执行搜索。
我得到的行为是..当用户滑动到下一个Fragment
时,搜索菜单会折叠,关键字就会消失。
这是我对SearchVenu
Activity
进行编码的方式
@Override
public boolean onQueryTextSubmit(String query) {
searchFragment = new SearchFragment();
Bundle searchBundle = new Bundle();
keyword = searchView.getQuery().toString();
searchBundle.putString("searchQuery", keyword);
searchFragment.setArguments(searchBundle);
backstackCount = manager.getBackStackEntryCount();
if (backstackCount >= 2) {
manager.executePendingTransactions();
if (manager.getBackStackEntryAt(backstackCount - 1).getName().equals("searchTag")) {
} else {
replaceFragment(searchFragment, searchTag);
}
} else {
replaceFragment(searchFragment, searchTag);
}
return false;
适配器:
mAdapter = new MyPagerAdapter(getChildFragmentManager(), bundle);
...
private class MyPagerAdapter extends FragmentStatePagerAdapter {
private Bundle fragmentBundle;
public MyPagerAdapter(FragmentManager fm, Bundle data) {
super(fm);
fragmentBundle = data;
}
@Override
public Fragment getItem(int pos) {
/*Fragment f = new Fragment();
f.setArguments(this.fragmentBundle);
return f;*/
switch(pos) {
case 0: return SearchFriendFragment.newInstance(fragmentBundle);
case 1: return SearchShopFragment.newInstance(fragmentBundle);
default: return SearchFriendFragment.newInstance(fragmentBundle);
}
}
@Override
public CharSequence getPageTitle(int position) {
return CONTENT[position % CONTENT.length];
}
@Override
public int getCount() {
//return 3;
return CONTENT.length;
}
}
这就是我在其中一个Fragments
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();
super.onPrepareOptionsMenu(menu);
getActivity().getMenuInflater().inflate(R.menu.menu_search, menu);
searchViewBtn = menu.findItem(R.id.menu_search);
searchView = (SearchView) MenuItemCompat.getActionView(searchViewBtn);
我很清楚,menu.clear()
会在切换Fragment
时继续刷新菜单。但我不知道该如何做才能获得正确的行为..
更新menu_search.xml
<item
android:id="@+id/menu_search"
android:orderInCategory="200"
android:title="Search"
android:icon="@drawable/iconcariheader"
app:showAsAction="ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"></item>
答案 0 :(得分:0)
使用我的建议
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.menu_search:
searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener
(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String query) {
// call your search function
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// call your search function
return true;
}
});
break;
}
return super.onOptionsItemSelected(item);
}
希望这会有所帮助,让我知道更多。