使用负载更后recyclerview着搜索过滤器

问题描述 投票:0回答:1

我有实现负载更多回收者视图。但是当我添加一个搜索筛选和排序筛选由于空对象引用其造成的错误。这是logcat的错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.ilham.obatherbal.herbalJava.herbalModel.getNama()' on a null object reference

我想添加基于基于什么名称和排序过滤搜索过滤器。

之前我添加负载更多功能的搜索过滤器的实际工作。这是我的主要活动代码:

       public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View rootView = inflater.inflate(R.layout.fragment_herbal, container, false);
            herbalModels = new ArrayList<>();

            RequestQueue queue = MySingleton.getInstance(this.getActivity().getApplicationContext()).getRequestQueue();
            get20Data();
            sortData(rootView);
            return rootView ;

        }
    private void StartRecyclerView(View rootView) {
            mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview_herbal);
            mRecyclerView.setHasFixedSize(true);

            mLayoutManager = new LinearLayoutManager(getActivity());

            // use a linear layout manager
            mRecyclerView.setLayoutManager(mLayoutManager);

            // create an Object for Adapter
            mAdapter = new herbalAdapter(mRecyclerView,getActivity(),herbalModels);

            mRecyclerView.setAdapter(mAdapter);

            mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
                @Override
                public void onLoadMore() {
                    //add null , so the adapter will check view_type and show progress bar at bottom
                    herbalModels.add(null);
                    mAdapter.notifyItemInserted(herbalModels.size() - 1);
                    handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //   remove progress item
                            herbalModels.remove(herbalModels.size() - 1);
                            mAdapter.notifyItemRemoved(herbalModels.size());
                            //add items one by one
                            int start = herbalModels.size();
                            int end = start + 20;
                            loadMore(start,end);

                           }
                    },5000);

                }
            });




        }
private void sortData(final View rootView) {

        final Spinner spinner = (Spinner) rootView.findViewById(R.id.filter_herbal);
// Create an ArrayAdapter using the string array and a default spinner layout
        List<categoriesHerbal> itemList = new ArrayList<categoriesHerbal>();
        itemList.add(
                new categoriesHerbal(
                        "1",
                        "All"
                )
        );itemList.add(
                new categoriesHerbal(
                        "2",
                        "Jamu"
                )
        );itemList.add(
                new categoriesHerbal(
                        "3",
                        "Kampo"
                )
        );
        ArrayAdapter<categoriesHerbal> spinnerAdapter = new ArrayAdapter<categoriesHerbal>(getActivity(), android.R.layout.simple_spinner_item, itemList);
        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Specify the layout to use when the list of choices appears

// Apply the adapter to the spinner
        spinner.setAdapter(spinnerAdapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (position == 0)
                {
                    StartRecyclerView(rootView);
                    searchData(rootView);

                }
                else
                {
                    categoriesHerbal selectedValue = (categoriesHerbal) parent.getItemAtPosition(position);
                    String categories = (String)selectedValue.getCategories();
                    String idCategories = (String )selectedValue.getIdCategories();
                    Log.d(TAG,"selected"+categories+id);
                    categories(idCategories);
                    searchOnCategories(rootView,idCategories);

                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }
private void searchData(View rootView) {
        search = (EditText) rootView.findViewById(R.id.search_herbal);
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                filter(s.toString());
            }
        });

    }
 private void filter(String s) {
        ArrayList<herbalModel> filteredList = new ArrayList<>();
        for (herbalModel item : herbalModels){
            if (item.getNama().toLowerCase().contains(s.toLowerCase()))
            {
                filteredList.add(item);
            }
        }
        mAdapter.filterlist(filteredList);
    }
android android-recyclerview
1个回答
0
投票

此错误表示该项目为空。在删除一个断点循环,看看有什么herbalModels阵列英寸这应该指向你对你为什么在这个循环空引用。

private void filter(String s) {
        ArrayList<herbalModel> filteredList = new ArrayList<>();
        for (herbalModel item : herbalModels){
            if (item.getNama().toLowerCase().contains(s.toLowerCase()))
            {
                filteredList.add(item);
            }
        }
        mAdapter.filterlist(filteredList);
    }
© www.soinside.com 2019 - 2024. All rights reserved.