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);
}