I created a Custom ListView and am trying to create a Custom Filter / Search Filter via EditText.

Code in DictionaryFragment:

EditText editText; ListView listView; MyAdapter adapter; MyAdapter myAdapter; ArrayList<SingleRow> mylist; TextWatcher textWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { myAdapter.getFilter().filter(s); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_dictionary, container, false); listView = view.findViewById(R.id.dictionaryList); editText = (EditText)view.findViewById(R.id.edit_search); editText.addTextChangedListener(textWatcher); mylist = new ArrayList<>(); SingleRow singleRow; for (int i = 0;i<mFind.length;i++){ singleRow = new SingleRow(mTitle[i],mDescriprion[i],images[i]); mylist.add(singleRow); } myAdapter = new MyAdapter(getActivity(),mylist); listView.setAdapter(myAdapter); return view; } 

MyAdapter class

 public class MyAdapter extends BaseAdapter implements Filterable { Context c; ArrayList<SingleRow> originalArray,tempArray; CustomFilter cs; public MyAdapter(Context c, ArrayList<SingleRow> originalArray){ this.c = c; this.originalArray = originalArray; this.tempArray = originalArray; } @Override public Object getItem(int i) { return originalArray.get(i); } @Override public View getView(int i, View view, ViewGroup viewGroup) { LayoutInflater inflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View row = inflater.inflate(R.layout.row,null); ImageView images = row.findViewById(R.id.imageViewKanji); TextView myTitle = row.findViewById(R.id.textView1); TextView myDescription = row.findViewById(R.id.textView2); myTitle.setText(originalArray.get(i).getTitle()); myDescription.setText(originalArray.get(i).getDescription()); images.setImageResource(originalArray.get(i).getImage()); return row; } @Override public int getCount() { return originalArray.size(); } @Override public long getItemId(int i) { //return originalArray.indexOf(getItemId(i)); return i; } @Override public Filter getFilter() { if (cs == null) { cs = new CustomFilter(); } return cs; } class CustomFilter extends Filter{ @Override protected FilterResults performFiltering(CharSequence charSequence) { FilterResults results = new FilterResults(); if (charSequence != null && charSequence.length() > 0) { charSequence = charSequence.toString().toUpperCase(); ArrayList<SingleRow> filters = new ArrayList<>(); for (int i = 0; i < tempArray.size(); i++) { if (tempArray.get(i).getTitle().toUpperCase().contains(charSequence)) { SingleRow singleRow = new SingleRow(tempArray.get(i).getTitle(), tempArray.get(i).getDescription(), tempArray.get(i).getImage()); filters.add(singleRow); } } results.count = filters.size(); results.values = filters; } else { results.count = tempArray.size(); results.values = tempArray; } return results; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { originalArray = (ArrayList<SingleRow>)filterResults.values; notifyDataSetChanged(); } } 

SingleRow Class

 public class SingleRow { String title; String description; int image; public SingleRow(String title, String description,int image){ this.title = title; this.description = description; this.image = image; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } 

}

 2019-05-12 17:06:15.359 17262-17262/com.example.kanjilearn E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.kanjilearn, PID: 17262 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kanjilearn/com.example.kanjilearn.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.addTextChangedListener(android.text.TextWatcher)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2794) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2872) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1601) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6600) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:821) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.addTextChangedListener(android.text.TextWatcher)' on a null object reference at com.example.kanjilearn.DictionaryFragment.onCreateView(DictionaryFragment.java:419) 

If this is not enough, then here is my github

  • In fragment_dictionary.xml there is no View with the identifier R.id.edit_search . - post_zeew
  • It is located in appBarMain - Fleshka_1337
  • Do you understand what is happening in the editText = (EditText)view.findViewById(R.id.edit_search) ? - post_zeew
  • I do not understand. Can you explain what I need to fix? - Fleshka_1337
  • Now you have an input field in the activation, and you process it in the fragment. It is necessary to make so that the arrangement and processing were in one essence, either in a fragment, or in aktiviti. - post_zeew

0