Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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 方向更改时如何保存searchView的状态_Android_Searchview - Fatal编程技术网

Android 方向更改时如何保存searchView的状态

Android 方向更改时如何保存searchView的状态,android,searchview,Android,Searchview,我在活动中有一个searchView。搜索过滤器工作得很好,但有一个问题我不知道如何解决。你们看,当我把方向从纵向改为横向时,会导致一个错误,我不知道我做错了什么。有人能告诉我我做错了什么吗 这是密码 ArrayList<petbook_getItem> bookItem=new ArrayList<>(); RecyclerView petbook; petbook_adapter adapter; LinearLayoutManager linearLayoutMa

我在活动中有一个searchView。搜索过滤器工作得很好,但有一个问题我不知道如何解决。你们看,当我把方向从纵向改为横向时,会导致一个错误,我不知道我做错了什么。有人能告诉我我做错了什么吗

这是密码

 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"