Android 方向更改时如何保存searchView的状态
我在活动中有一个searchView。搜索过滤器工作得很好,但有一个问题我不知道如何解决。你们看,当我把方向从纵向改为横向时,会导致一个错误,我不知道我做错了什么。有人能告诉我我做错了什么吗 这是密码Android 方向更改时如何保存searchView的状态,android,searchview,Android,Searchview,我在活动中有一个searchView。搜索过滤器工作得很好,但有一个问题我不知道如何解决。你们看,当我把方向从纵向改为横向时,会导致一个错误,我不知道我做错了什么。有人能告诉我我做错了什么吗 这是密码 ArrayList<petbook_getItem> bookItem=new ArrayList<>(); RecyclerView petbook; petbook_adapter adapter; LinearLayoutManager linearLayoutMa
ArrayList<petbook_getItem> bookItem=new ArrayList<>();
RecyclerView petbook;
petbook_adapter adapter;
LinearLayoutManager linearLayoutManager;
TextView pet_title;
private static Parcelable pet_recycler;
SearchView searchView;
private static final String SEARCH_KEY = "search";
String mSearchString;
MenuItem searchItem;
if(savedInstanceState != null){
mSearchString=savedInstanceState.getString(SEARCH_KEY);
}
pet_title=(TextView)findViewById(R.id.pet_book_title);
petbook=(RecyclerView)findViewById(R.id.pet_book_pet);
navbot=(BottomNavigationView) findViewById(R.id.petbook_navbot);
toolbar=(Toolbar)findViewById(R.id.petbook_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setTitle("");
linearLayoutManager=new LinearLayoutManager(this);
petbook.setHasFixedSize(true);
petbook.setLayoutManager(linearLayoutManager);
refresh();
disableShiftMode(navbot);
petbook.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0 && navbot.isShown()) {
navbot.setVisibility(View.GONE);
} else if (dy < 0 ) {
navbot.setVisibility(View.VISIBLE);
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home){
{
finish();
}
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
MenuInflater menuInflater= getMenuInflater();
menuInflater.inflate(R.menu.petbook_searck,menu);
searchItem=menu.findItem(R.id.pet_book_search_mode);
searchView =(SearchView)MenuItemCompat.getActionView(searchItem);
if (mSearchString != null && !mSearchString.isEmpty()) {
searchItem.expandActionView();
searchView.setQuery(mSearchString, true);
searchView.clearFocus();
}
search(searchView);
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
pet_title.setVisibility(View.INVISIBLE);
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
pet_title.setVisibility(View.VISIBLE);
return true;
}
});
return true;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mSearchString = searchView.getQuery().toString();
outState.putString(SEARCH_KEY, mSearchString);
}
@Override
public void onPause() {
super.onPause();
pet_recycler = petbook.getLayoutManager().onSaveInstanceState();
}
@Override
public void onResume()
{ //
super.onResume();
if (mSearchString != null && !mSearchString.isEmpty()) {
searchItem.expandActionView();
searchView.setQuery(mSearchString, true);
searchView.clearFocus();
adapter.filterSearch(newList);
adapter.notifyDataSetChanged();
}
else
{
bookItem.clear();
refresh();
}
petbook.getLayoutManager().onRestoreInstanceState(pet_recycler);
}
public void search(android.support.v7.widget.SearchView search)
{
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
newText=newText.toLowerCase();
newList=new ArrayList<>();
for(petbook_getItem items : bookItem){
String pets=items.getPet_name().toLowerCase();
if(pets.contains(newText))
newList.add(items);
}
adapter.filterSearch(newList);
adapter.notifyDataSetChanged();
return true;
}
});
}
这里!代码中的所有内容对我来说都很好 在项目清单中的活动定义中使用此属性标记
android:configChanges="keyboardHidden|orientation|screenSize"
这将停止屏幕旋转时的自动活动重新启动问题。还有更多的方法可以做到这一点太好了,如果在您的情况下不起作用,请继续评论!但它肯定会有用的谢谢你,它有用,谢谢你的链接解释它
android:configChanges="keyboardHidden|orientation|screenSize"