How to create a filter to find the necessary list items with a listView?
in my code crashes on line sAdapter.notifyDataSetChanged ();
public class FirstFragment extends ListFragment { final String ATTRIBUTE_NAME_TEXT = "text"; final String ATTRIBUTE_NAME_LL = "ll"; ListView lvSimple; SimpleAdapter sAdapter; EditText editsearch; Map<String, Object> m; ArrayList<Map<String, Object>> aData ; ArrayList<Map<String, Object>> mAllData; String product[] = new String[]{"one", "two", "three", "four", "five"}; Integer degree[] = {99, 98, 97,96,96}; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_first, container, false); editsearch = (EditText) rootView.findViewById(R.id.inputSearch); return rootView; } //End OnCreate() @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); aData = new ArrayList<Map<String, Object>>(product.length); mAllData= new ArrayList<>(); for (int i = 0; i < product.length; i++) { m = new HashMap<String, Object>(); m.put(ATTRIBUTE_NAME_TEXT, product[i]); m.put(ATTRIBUTE_NAME_LL, degree[i]); aData.add(m); //& mAllData.add(m); // for filter } String[] from = {ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_LL}; int[] to = {R.id.tvLoad, R.id.llLoad}; SimpleAdapter sAdapter = new SimpleAdapter(getActivity(), aData, R.layout.e_list_item, from, to); setListAdapter(sAdapter); lvSimple = (ListView) getActivity().findViewById(R.id.list_one); lvSimple.setAdapter(sAdapter); editsearch.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub String text = editsearch.getText().toString().toLowerCase(Locale.getDefault()); } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub String text = editsearch.getText().toString().toLowerCase(Locale.getDefault()); filter(text); } }); } //End onActivityCreated() public void filter(String charText) { charText = charText.toLowerCase(Locale.getDefault()); aData.clear(); if (charText.length() == 0) { aData.addAll(mAllData); } else { for (Map<String, Object> wp : mAllData) { if (wp.keySet().contains(charText)) { aData .add((Map<String, Object>) wp); } } } sAdapter.notifyDataSetChanged(); // вылетает на этой строчке } } stack trace:
FATAL EXCEPTION: main java.lang.NullPointerException at com.fts.sejo.foodadditive.FirstFragment.filter(FirstFragment.java:122) at com.fts.sejo.foodadditive.FirstFragment$1.onTextChanged(FirstFragment.java:102) at android.widget.TextView.sendOnTextChanged(TextView.java:7079) at android.widget.TextView.handleTextChanged(TextView.java:7138) at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:8732) at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30) at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:222) at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:136) at android.widget.TextView.doKeyDown(TextView.java:5240) at android.widget.TextView.onKeyDown(TextView.java:5059) at android.view.KeyEvent.dispatch(KeyEvent.java:2609) at android.view.View.dispatchKeyEvent(View.java:7086) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1892) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1369) at android.app.Activity.dispatchKeyEvent(Activity.java:2356) at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:531) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:241) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1819) at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3575) at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3545) at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2795) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)
SimpleAdapterimplements theFilterableinterface. Better use it to filter the list and POJO-model instead ofMap- pavlofff