我的完整项目如下:有一个listView连接到数据库和一个带有建议的搜索选项.我想将此搜索栏移至操作栏并将其格式化为Google Play商店搜索栏.请帮帮我,我的完整代码是:
MainActivity.java
package com.GurbaniAndSikh.MahaanKosh; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; /* * Created by GurbaniAndSikh */ public class DictionaryMainActivity extends AppCompatActivity { private static RecyclerView.Adapter adapter; private RecyclerView.LayoutManager layoutManager; private static RecyclerView recyclerView; public static ArrayListdata; DatabaseHelper db ; ArrayList wordcombimelist; ArrayList meancombimelist; LinkedHashMap namelist; SearchView searchView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); recyclerView.setHasFixedSize(true); db= new DatabaseHelper(this); searchView = (SearchView) findViewById(R.id.searchView); searchView.setQueryHint("Search Here"); searchView.setQueryRefinementEnabled(true); layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator()); data = new ArrayList (); fetchData(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) {return false; } @Override public boolean onQueryTextChange(String newText) { newText = newText.toLowerCase(); final ArrayList filteredList = new ArrayList (); for (int i = 0; i < wordcombimelist.size(); i++) { final String text = wordcombimelist.get(i).toLowerCase(); if (text.contains(newText)) { filteredList.add(new DictObjectModel(wordcombimelist.get(i),meancombimelist.get(i))); } } adapter = new CustomAdapter(filteredList); recyclerView.setAdapter(adapter); return true; } }); } public void fetchData() { db =new DatabaseHelper(this); try { db.createDataBase(); db.openDataBase(); } catch (Exception e) { e.printStackTrace(); } namelist=new LinkedHashMap<>(); int ii; SQLiteDatabase sd = db.getReadableDatabase(); Cursor cursor = sd.query("Dictionary1" ,null, null, null, null, null, null); ii=cursor.getColumnIndex("word"); wordcombimelist=new ArrayList (); meancombimelist= new ArrayList (); while (cursor.moveToNext()){ namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("definition"))); } Iterator entries = namelist.entrySet().iterator(); while (entries.hasNext()) { Map.Entry thisEntry = (Map.Entry) entries.next(); wordcombimelist.add(String.valueOf(thisEntry.getKey())); meancombimelist.add("- "+String.valueOf(thisEntry.getValue())); } for (int i = 0; i < wordcombimelist.size(); i++) { data.add(new DictObjectModel(wordcombimelist.get(i), meancombimelist.get(i))); } adapter = new CustomAdapter(data); recyclerView.setAdapter(adapter); } }
我使用这些代码将searchView添加到操作栏但getfilter()不起作用.
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_search, menu); MenuItem item = menu.findItem(R.id.menuSearch); SearchView searchView = (SearchView)item.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText); return false; } }); return super.onCreateOptionsMenu(menu); }
请告诉我如何接近我的目标请帮助我
在选项菜单中创建搜索视图,然后通过以onCreateOptionsMenu()
编程方式覆盖来使用它.
稍后在Activity类中,
@Override public boolean onCreateOptionsMenu( Menu menu) { getMenuInflater().inflate( R.menu.menu_main, menu); MenuItem myActionMenuItem = menu.findItem( R.id.action_search); final SearchView searchView = (SearchView) myActionMenuItem.getActionView(); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { if (TextUtils.isEmpty(newText)) { adapter.filter(""); listView.clearTextFilter(); } else { adapter.filter(newText); } return true; } }); return true; }