【发布时间】:2015-11-24 16:56:53
【问题描述】:
我对在哪里添加搜索视图侦听器感到困惑,因为我在片段中有一个列表。我已将与列表相关的所有变量声明为静态。适配器也在主要活动中声明为静态变量。但是当我在主要活动的 onCreateOptionsMenu 方法中设置 onQueryTextListener 时,我在适配器上得到空指针异常。所以我想在片段中添加监听器,因为适配器在片段中。所以我将searchview变量声明为一个静态变量,这样我就可以在片段中访问它,但它失败了,因为我在searchview上得到了空指针异常。有人可以指导我吗..
主要活动
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView= (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName()) );
return true;
}
片段代码
public class ViewStock extends Fragment {
final MainActivity act = (MainActivity) this.getActivity();
public RecyclerView mRecyclerView;
public ViewStock() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootview = inflater.inflate(R.layout.fragment_view_stock, container, false);
act.array_data = new ArrayList<Item>();
mRecyclerView = (RecyclerView)rootview.findViewById(R.id.my_recycler_view);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(llm);
act.db = new DBHandler(getActivity());
ArrayList<Item> item_array_from_db = act.db.Get_items();
for (int i = 0; i < item_array_from_db.size(); i++) {
int idno = item_array_from_db.get(i).getID();
String name = item_array_from_db.get(i).getItem_name();
String desc = item_array_from_db.get(i).getItem_desc();
String qty = item_array_from_db.get(i).getItem_qty();
Item cnt = new Item();
cnt.setID(idno);
cnt.setItem_name(name);
cnt.setItem_desc(desc);
cnt.setItem_qty(qty);
act.array_data.add(cnt);
}
act.db.close();
act.adapter=new ItemAdapter(getActivity(),act.array_data);
mRecyclerView.setAdapter(act.adapter);
return rootview;
}
}
搜索查看活动
public class SearchResultsActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
showResults(query);
}
}
private void showResults(String query) {
// Query your data set and show results
// ...
}
}
这样做我没有得到任何结果。请帮忙..
【问题讨论】:
标签: java android listview filter searchview