在我的应用程序中,我实现了带有cardvIEw的recyclervIEw以显示公司内部员工的列表.现在,我想实现一个serch选项,用户可以通过该选项搜索雇员的姓名.我已经在网站上阅读了有关文件.我编写了代码来实现serch选项.但不幸的是,我可以看到搜索选项,并且可以编写它,但是它无法从列表中检测到该名称.我不知道我的代码内的问题是什么.这是我的适配器类,我在其中实现了可过滤的方法
public class MyColleaguesAdapter extends RecyclerVIEw.Adapter<MyColleaguesAdapter.ColleagueHolder> implements Filterable {private static final String TAG = "MyColleaguesAdapter";protected List<MyColleageModel> colleagueObject;protected List<MyColleageModel> filteredcolleague;private Context context;public MyColleaguesAdapter(List<MyColleageModel> colleagueObject, Context context) { this.colleagueObject = colleagueObject; this.filteredcolleague=colleagueObject; this.context = context;}@OverrIDepublic ColleagueHolder onCreateVIEwHolder(VIEwGroup parent, int vIEwType) { VIEw vIEw= LayoutInflater.from(parent.getContext()) .inflate(R.layout.colleage_row_layout,parent,false); return new ColleagueHolder(vIEw);}@OverrIDepublic voID onBindVIEwHolder(ColleagueHolder holder, int position) { final MyColleageModel myColleague=colleagueObject.get(position); holder.name.setText(myColleague.getname()); holder.company.setText(myColleague.getCompany()); holder.Title.setText(myColleague.getTitle()); holder.cardVIEw.setTag(position); holder.cardVIEw.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { int pos = (int)vIEw.getTag(); openDetailActivity(myColleague.getMobile(),myColleague.getMail(), myColleague.getname(), myColleague.getCompany(), myColleague.getDepartment(), myColleague.getTitle()); } });}@OverrIDepublic int getItemCount() { return colleagueObject.size();}//open activityprivate voID openDetailActivity(String...details){ Intent i=new Intent(context,DetailMyColleague.class); i.putExtra("mail",details[1]); ........ context.startActivity(i);}@OverrIDepublic Filter getFilter() { return new Filter() { @SuppressWarnings("unchecked") @OverrIDe protected voID publishResults(CharSequence constraint, FilterResults results) { filteredcolleague = (List<MyColleageModel>) results.values; MyColleaguesAdapter.this.notifyDataSetChanged(); } @OverrIDe protected FilterResults performFiltering(CharSequence constraint) { List<MyColleageModel> filteredResults = null; if (constraint.length() == 0) { filteredResults = colleagueObject; } else { filteredResults = getFilteredResults(constraint.toString().tolowerCase()); } FilterResults results = new FilterResults(); results.values = filteredResults; return results; } }; }protected List<MyColleageModel> getFilteredResults(String constraint) { List<MyColleageModel> results = new ArrayList<>(); for (MyColleageModel item : colleagueObject) { if (item.getname().tolowerCase().contains(constraint)) { results.add(item); Log.d( TAG,"value is here "+item.getname()); } } return results;}public class ColleagueHolder extends RecyclerVIEw.VIEwHolder implements VIEw.OnClickListener{ public CardVIEw cardVIEw; public TextVIEw name; public TextVIEw company; public TextVIEw Title; public ColleagueHolder(VIEw itemVIEw) { super(itemVIEw); name=(TextVIEw) itemVIEw.findVIEwByID(R.ID.colleague_name); company=(TextVIEw)itemVIEw.findVIEwByID(R.ID.company_name); Title=(TextVIEw) itemVIEw.findVIEwByID(R.ID.job_role); cardVIEw=(CardVIEw)itemVIEw.findVIEwByID(R.ID.cvSingleUser); } }
这是我的MainActivity
public class MyColleaguesPage extends AppCompatActivity implements SearchVIEw.OnqueryTextListener{private RecyclerVIEw recyclerVIEw;private CardVIEw cardVIEw;private MyColleaguesAdapter adapter;private List<MyColleageModel> colleagueObject;inputStream is;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.mycolleagues_layout); // Showing and Enabling clicks on the Home/Up button if (getSupportActionbar() != null) { getSupportActionbar().setdisplayHomeAsUpEnabled(true); getSupportActionbar().setdisplayShowHomeEnabled(true); } cardVIEw=(CardVIEw)findVIEwByID(R.ID.cvSingleUser); recyclerVIEw = (RecyclerVIEw) findVIEwByID(R.ID.colleagues_recycler); recyclerVIEw.setHasFixedSize(true); RecyclerVIEw.LayoutManager layoutManager = new linearlayoutmanager(MyColleaguesPage.this); recyclerVIEw.setLayoutManager(layoutManager); new JsONTask().execute();} @OverrIDe public boolean onqueryTextsubmit(String query) { return false; } @OverrIDe public boolean onqueryTextChange(String newText) { List<MyColleageModel> filteredModelList = filter(colleagueObject, newText); if (filteredModelList.size() > 0) { //myPhotosAdapter.setFilter(filteredModelList); return true; } else { Toast.makeText(MyColleaguesPage.this, "Not Found", Toast.LENGTH_SHORT).show(); return false; } } public class JsONTask extends AsyncTask<String, String, List<MyColleageModel>> { @OverrIDe protected voID onPreExecute() { super.onPreExecute(); } @OverrIDe protected List<MyColleageModel> doInBackground(String... params) { colleagueObject = new ArrayList<MyColleageModel>(); try { //withou Gson JsONObject obj = new JsONObject(loadJsONFromAsset()); JsONArray m_jArry = obj.getJsONArray("contacts"); MyColleageModel my_clg; for (int i = 0; i < m_jArry.length(); i++) { JsONObject jo_insIDe = m_jArry.getJsONObject(i); String val1 = jo_insIDe.getString("mobile"); String val2 = jo_insIDe.getString("mail"); String val3 = jo_insIDe.getString("name"); String val4 = jo_insIDe.optString("company"); String val5 = jo_insIDe.optString("department"); String val6 = jo_insIDe.optString("Title"); my_clg = new MyColleageModel(val1, val2, val3, val4, val5, val6); colleagueObject.add(my_clg); } } catch (JsONException e) { e.printstacktrace(); } return null; } @OverrIDe protected voID onPostExecute(final List<MyColleageModel> result) { super.onPostExecute(result); adapter = new MyColleaguesAdapter(colleagueObject, getApplicationContext()); recyclerVIEw.setAdapter(adapter); adapter.notifyDataSetChanged(); }}private String loadJsONFromAsset() { ....}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.recyclervIEwmenu, menu); final MenuItem search = menu.findItem(R.ID.search); final SearchVIEw searchVIEw = (SearchVIEw) MenuItemCompat.getActionVIEw(search); searchVIEw.setonqueryTextListener(this); return true;}private List<MyColleageModel> filter(List<MyColleageModel> models, String query) { query = query.tolowerCase(); final List<MyColleageModel> filteredModelList = new ArrayList<>(); for (MyColleageModel model : models) { final String text = model.getname().tolowerCase().toString(); if (text.contains(query)) { filteredModelList.add(model); } } // arrayList in your adapter adapter = new MyColleaguesAdapter(colleagueObject, getApplicationContext()); recyclerVIEw.setAdapter(adapter); adapter.notifyDataSetChanged(); return filteredModelList;}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) { int ID = item.getItemID(); if (ID == androID.R.ID.home) { finish(); } return super.onoptionsItemSelected(item);}
}
这是我的recyclervIEwmenu.xml
<menu xmlns:androID="http://schemas.androID.com/apk/res/androID"xmlns:app="http://schemas.androID.com/apk/res-auto"xmlns:tools="http://schemas.androID.com/tools" tools:context="myColleagues.MyColleaguesPage"><item androID:ID="@+ID/search" androID:icon="@drawable/ic_search" androID:title="Search" app:showAsAction="ifRoom|collapseActionVIEw" app:actionVIEwClass="androID.support.v7.Widget.SearchVIEw"/></menu>
我的代码中没有错误.
解决方法:
按照这个步骤
步骤1在youractivity中实现SearchVIEw.OnqueryTextListener
onCreateOptionsMenu中的步骤2编写以下代码
@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_album_search, menu); final MenuItem item = menu.findItem(R.ID.menu_search_album); final SearchVIEw searchVIEw = (SearchVIEw) MenuItemCompat.getActionVIEw(item); searchVIEw.setonqueryTextListener(this); return true;}
步骤3在onqueryTextChange()方法中编写
@OverrIDepublic boolean onqueryTextChange(String newText) { List<MyColleageModel> filteredModelList = filter(data_fIEldses, newText); if (filteredModelList.size() > 0) { //myPhotosAdapter.setFilter(filteredModelList); return true; } else { Toast.makeText(MyPhotosActivity.this, "Not Found", Toast.LENGTH_SHORT).show(); return false; }}
第四步
private List<MyColleageModel> filter(List<MyColleageModel> models, String query) { query = query.tolowerCase(); final List<MyColleageModel> filteredModelList = new ArrayList<>(); for (MyColleageModel model : models) { final String text = model.getimagename().tolowerCase().toString(); if (text.contains(query)) { filteredModelList.add(model); } } // arrayList in your adapter myPhotosAdapter = new MyPhotosAdapter( MyPhotosActivity.this, (ArrayList<MyColleageModel>) filteredModelList); recyclerVIEwMyPhotos.setLayoutManager(new GrIDLayoutManager(MyPhotosActivity.this, 2)); recyclerVIEwMyPhotos.setAdapter(myPhotosAdapter); myPhotosAdapter.notifyDataSetChanged(); return filteredModelList;}
如有疑问请问我
总结以上是内存溢出为你收集整理的android-在recyclerview中使用过滤器方法的自动搜索选项全部内容,希望文章能够帮你解决android-在recyclerview中使用过滤器方法的自动搜索选项所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)