2

I have navigation drawer menu with several fragments, one of my fragment have EditText in action bar for listview search function, it's work great but when the user clicks the same fragment for the second time or click it from another fragment the app crash and give a return null pointer in aftertextchanged. Here is my code

MyWallet fragment

@Override
    public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
        super.onCreateOptionsMenu(menu, inflater);
        getActivity().getMenuInflater().inflate(R.menu.search_menu, menu);      

        View v = (View) menu.findItem(R.id.action_search).getActionView();

        final EditText txtSearch = (EditText) v.findViewById(R.id.searchfield);

        txtSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                Log.e("TextWatcher", s.toString());
                if(txtSearch != null){
                    String text = txtSearch.getText().toString().toLowerCase(Locale.getDefault());
                    adapter.filter(text);
                }
            }
        });

and here is the log cat

01-10 23:12:35.030: E/AndroidRuntime(1221): FATAL EXCEPTION: main
01-10 23:12:35.030: E/AndroidRuntime(1221): java.lang.NullPointerException
01-10 23:12:35.030: E/AndroidRuntime(1221): at com.example.bawakartu.MyWallet$1.afterTextChanged(MyWallet.java:139)
01-10 23:12:35.030: E/AndroidRuntime(1221): at android.widget.TextView.sendAfterTextChanged(TextView.java:7095)
01-10 23:12:35.030: E/AndroidRuntime(1221): at android.widget.TextView.setText(TextView.java:3554)
01-10 23:12:35.030: E/AndroidRuntime(1221): at android.widget.TextView.setText(TextView.java:3405)
01-10 23:12:35.030: E/AndroidRuntime(1221): at android.widget.EditText.setText(EditText.java:80)
01-10 23:12:35.030: E/AndroidRuntime(1221): at android.widget.TextView.setText(TextView.java:3380)
01-10 23:12:35.030: E/AndroidRuntime(1221): at android.widget.TextView.onRestoreInstanceState(TextView.java:3280)

Thanks before

Solution

so it happens because the function call adapter before it finish load in post execute, so I just add this line of code and it's working, thank you all

if(adapter != null)
{
    adapter.filter(text);
}
Alireza Noorali
  • 3,129
  • 2
  • 33
  • 80
mrconga
  • 31
  • 7

0 Answers0