Я смущен о том, где добавить слушателя поиска, поскольку у меня есть список в фрагменте. Я объявил все переменные связанного с списком как статические. Адаптер также объявлен как статическая переменная в основном действии. Но когда я устанавливаю onQueryTextListener в onCreateOptionsMenu метод основной активности, я получаю исключение нулевого указателя на адаптере. Поэтому я подумал о добавлении слушателя в фрагмент, поскольку адаптер находится в фрагменте. Таким образом, я объявил переменную searchview как статическую переменную, чтобы я мог получить доступ к ней в фрагменте, но она не удалась, поскольку я получил исключение нулевого указателя в searchview. Может кто-нибудь наставит меня для этого, пожалуйста ..где добавить setOnQueryTextListener для поиска, чтобы отфильтровать список?
Основная деятельность
@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;
}
}
SearchView активность
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
// ...
}
}
Я не получаю никакого результата, делая это. Пожалуйста, помогите ..
Спасибо за ответ .. я понимаю, почему вы использовали mStatusV МЭН ?? –