我想从活动中搜索并根据片段内的搜索结果(在View Pager中)创建列表。
public interface SearchImpl {
public void searchQuery(String val);
}
片段
public class MyFragment extends Fragment implements SearchImpl {
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_almanca, container, false);
return view;
}
@Override
public void searchQuery(String val) {
Log.e("getted", val);
}
}
积极
@Override
public boolean onCreateOptionsMenu(菜单菜单){
getMenuInflater().inflate(R.menu.main, menu);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Log.e("setted", "" + query);
try {
MyFragment myFGM=new MyFragment();
myFGM.searchQuery(query);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
我在片段内部获取ListView的空指针异常。
答案 0 :(得分:0)
尝试使用SearchView
而不是使用EditText
。向其中添加一个TextWatcher。
private TextWatcherListener watcherListener;
edittext.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
watcherListener.onEditBoxEdited(String.valueOf(s));
}
});
}
创建一个方法并在片段中使用此方法。
public void setWatcherListener(TextWatcherListener listener) {
watcherListener = listener;
}
在fragment
((ActivityName) getActivity()).setWatcherListener(new TextWatcherListener() {
@Override
public void onEditBoxEdited(String value) {
//Do something with value
}
});
不需要接口,因为您可以通过片段访问活动中的方法。