android-在recyclerview中使用过滤器方法的自动搜索选项

android-在recyclerview中使用过滤器方法的自动搜索选项,第1张

概述在我的应用程序中,我实现了带有cardview的recyclerview以显示公司内部员工的列表.现在,我想实现一个serch选项,用户可以通过该选项搜索雇员的姓名.我已经在网站上阅读了有关文件.我编写了代码来实现serch选项.但不幸的是,我可以看到搜索选项,并且可以编写它,但是它无法从列表中检测

在我的应用程序中,我实现了带有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中使用过滤器方法的自动搜索选项所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1093070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存