我的导航抽屉菜单有几个片段,我的片段之一在操作栏中有EditText用于列表视图搜索功能,它工作得很好但是当用户第二次点击同一片段或从另一个片段点击它时应用程序崩溃并在aftertextchanged中给出一个返回空指针。这是我的代码
MyWallet片段
@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);
}
}
});
这是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)
之前谢谢
解决方案
所以它发生是因为函数调用适配器在post执行后完成加载,所以我只是添加这行代码并且它正常工作,谢谢大家
if(adapter != null)
{
adapter.filter(text);
}