通过SearchView过滤ListFragment

时间:2018-01-18 10:57:50

标签: android android-studio

enter image description here在通过searchView.setOnQueryTextListener new SearchView.OnQueryTextListener过滤后,我无法使用搜索窗口小部件搜索列表碎片。

代码:::

 @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setHasOptionsMenu(true);

       adapter = new ArrayAdapter<String>(
                getActivity(), android.R.layout.simple_list_item_activated_1,
                hymns.HYMN_HEAD);

        setListAdapter(adapter);

        View detailsFrame = getActivity().findViewById(R.id.details);

        mDuelPane = detailsFrame!= null && detailsFrame.getVisibility() == View.VISIBLE;


        if(savedInstanceState != null){

            mCurCheckPosition =  savedInstanceState.getInt("curChoice", 0);
        }

        if(mDuelPane){
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            showDetails(mCurCheckPosition);
        }

    };

    searchView.setOnQueryTextListener new SearchView.OnQueryTextListener(){ 

        @Override
        public boolean onQueryTextSubmit(String query) { 
            return true;
        } 

        @Override
        public boolean onQueryTextChange(String newText) {
            adapter.getFilter().filter(query); return true;
        }
    }

过滤器有效但单击搜索的项目时,它不会返回详细信息活动中的索引true位置。例如,如果一个项目在原始列表视图中位于第77位,并且您尝试通过过滤进行搜索,并且在过滤之后,所述第77项现在是过滤器的数字1位置,当单击时,而不是返回第77个详细活动的位置,它返回原始列表视图的头号细节。 我希望你能帮助我,因为我是一名婴儿程序员。谢谢先生

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要使用新过滤的适配器更新列表

@Override
    public boolean onQueryTextChange(String newText) {
        adapter.getFilter().filter(query); 
        setListAdapter(adapter);
        return true;

    }