Android滤清器回收站查看来自翻新的数据

莫阿伊德·阿莱谢

我有这个回收站视图,并且我从Retrofit API获取数据,问题是当我尝试在回收站中进行过滤时,我在互联网上搜索并且所有示例都是字符串列表,但是我有对象列表,如何解决这个问题案例并在工具栏中创建过滤器?我将发布我的代码,并希望任何人提供帮助,谢谢

活动

public class TodoList extends AppCompatActivity implements DialogFragUpdateListener {
    RecyclerView todoRecyclerView;
    private RecyclerView.Adapter todoAdapter;
    private RecyclerView.LayoutManager todoLayoutManager;
    public List<ToDo> results;
    public List<String> list = new ArrayList<>();


    TodoRecyclerAdapter recyclerAdapter;
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_todo_list);


        todoRecyclerView = (RecyclerView)findViewById(R.id.todoRecyclerView);
        todoRecyclerView.setHasFixedSize(true);
        results= new ArrayList<ToDo>();


        todoLayoutManager = new LinearLayoutManager(this);
        todoRecyclerView.setLayoutManager(todoLayoutManager);

       
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(TodoList.this,AddToDo.class);
                startActivity(intent);
            }
        });}

    public void getRetrofitObject() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        APIService service = retrofit.create(APIService.class);
        Call<Result> call = service.getresults();
        call.enqueue(new Callback<Result>() {
            @Override
            public void onResponse(Call<Result> call, Response<Result> response) {

                results = response.body().getResults();
                if(recyclerAdapter == null){

                recyclerAdapter = new TodoRecyclerAdapter(this,results);
                todoRecyclerView.setAdapter(recyclerAdapter);
            }
            else{

                recyclerAdapter.setData(results);
                recyclerAdapter.notifyDataSetChanged();
            }

            }
            @Override
            public void onFailure(Call<Result> call, Throwable t) {
                Log.d("onFailure", t.toString());
            }});}

    @Override
    public void OnDBUpdate() {


        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        APIService service = retrofit.create(APIService.class);
        Call<Result> call = service.getresults();
        call.enqueue(new Callback<Result>() {
            @Override
            public void onResponse(Call<Result> call, Response<Result> response) {
                results = response.body().getResults();
                if(recyclerAdapter == null){

                recyclerAdapter = new TodoRecyclerAdapter(this,results);
                todoRecyclerView.setAdapter(recyclerAdapter);
            }
            else{

                recyclerAdapter.setData(results);
                recyclerAdapter.notifyDataSetChanged();
            }
            }
            @Override
            public void onFailure(Call<Result> call, Throwable t) {
                Log.d("onFailure", t.toString());
            }});
    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_search, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {

            }
        });

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String query) {
recyclerAdapter.getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String searchQuery) {
               
                return true;
            }
        });

        MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                return true;
            }
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }
        });
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.action_search) {

            return true;
        }
        return super.onOptionsItemSelected(item);
    }}

这是适配器

public class TodoRecyclerAdapter  extends RecyclerView.Adapter<TodoRecyclerAdapter.ViewHolder>  {
static List<ToDo> todoResults;
static Context context;
List<ToDo>results;
ArrayList<ToDo> arraylist;
private List<String> mDefaultCheeses;



public TodoRecyclerAdapter(Callback<Result> callback, List<ToDo> results) {
    this.todoResults = results;
    arraylist = new ArrayList<ToDo>();
    arraylist.addAll(todoResults);

}
@Override
public TodoRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.todo_items, null);
    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;
}
@Override
public void onBindViewHolder(final TodoRecyclerAdapter.ViewHolder holder, final int position) {
    holder.todoTitle.setText(todoResults.get(position).getTODO_TITLE().toString());
    String priority = todoResults.get(position).getPriority().toString();
    if (priority.equals("Low")) {
        holder.todoImage.setImageResource(R.drawable.low);
    } else if (priority.equals("Normal")) {
        holder.todoImage.setImageResource(R.drawable.normal);
    } else if (priority.equals("High")) {
        holder.todoImage.setImageResource(R.drawable.high);
    }
}


@Override
public int getItemCount() {
    return  todoResults.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    public TextView todoTitle;
    public ImageView todoImage;
    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        todoTitle = (TextView) itemLayoutView.findViewById(R.id.todo_title);
        todoImage = (ImageView) itemLayoutView.findViewById(R.id.imageView2);
    }}

这是菜单

<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="com.android.nigeriaexams.ui.SettingsFragment">
<item android:id="@+id/action_search"
    android:title="Search"
    android:icon="@drawable/ic_search"
    app:showAsAction="collapseActionView|always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:layout_width="wrap_content" />
瓦西姆·梅蒙(Wasim K.Memon)

您可以在适配器中实现Filterable接口,并且可以这样做

public class TodoRecyclerAdapter extends RecyclerView.Adapter<TodoRecyclerAdapter.ViewHolder> implements Filterable {

        static List<ToDo> todoResults;
        static Context context;
        List<ToDo>results;
        ArrayList<ToDo> arraylist;
        private List<String> mDefaultCheeses;

        private ToDoListFilter listFilter;

        private List<ToDo> mData;
        private List<ToDo> originalData;


        public TodoRecyclerAdapter(Callback<Result> callback, List<ToDo> results) {
            this.todoResults = results;
            arraylist = new ArrayList<ToDo>();
            arraylist.addAll(todoResults);

        }

        public List<ChatListData> getData() {
            return mData;
        }

        public void setData(List<ChatListData> mData) {
            this.mData = mData;

            if (originalData == null) {
                originalData = mData;
            }
        }

        @Override
        public TodoRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.todo_items, null);
            ViewHolder viewHolder = new ViewHolder(itemLayoutView);
            return viewHolder;
        }

        @Override
        public void onBindViewHolder(final TodoRecyclerAdapter.ViewHolder holder, final int position) {
            holder.todoTitle.setText(todoResults.get(position).getTODO_TITLE().toString());
            String priority = todoResults.get(position).getPriority().toString();
            if (priority.equals("Low")) {
                holder.todoImage.setImageResource(R.drawable.low);
            } else if (priority.equals("Normal")) {
                holder.todoImage.setImageResource(R.drawable.normal);
            } else if (priority.equals("High")) {
                holder.todoImage.setImageResource(R.drawable.high);
            }
        }

         @Override
            public Filter getFilter() {
                if (listFilter == null)
                    listFilter = new ToDoListFilter(this,originalData);

                return listFilter;
            }

        @Override
        public int getItemCount() {
            return  todoResults.size();
        }

        public static class ViewHolder extends RecyclerView.ViewHolder {
            public TextView todoTitle;
            public ImageView todoImage;
            public ViewHolder(View itemLayoutView) {
                super(itemLayoutView);
                todoTitle = (TextView) itemLayoutView.findViewById(R.id.todo_title);
                todoImage = (ImageView) itemLayoutView.findViewById(R.id.imageView2);
            }
        }


        private class ToDoListFilter extends Filter {

            private final TodoRecyclerAdapter listAdapter;

            private final List<ToDo> originalData;
            private List<ToDo> filteredData;

            public ToDoListFilter(TodoRecyclerAdapter listAdapter, List<ToDo> originalData) {
                this.listAdapter = listAdapter;
                this.originalData = originalData;
                this.filteredData = new ArrayList<>();
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                filteredData.clear();
                final FilterResults results = new FilterResults();

                Log.d("performFiltering: " , constraint.toString());

                if (TextUtils.isEmpty(constraint.toString())) {
                    filteredData.addAll(originalData);
                } else {
                    final String filterPattern = constraint.toString().toLowerCase().trim();

                    for (final ToDo user : originalData) {
                        // set condition for filter here
                        if (user.getToUserName().toLowerCase().contains(filterPattern)) {
                            filteredData.add(user);
                        }
                    }
                }

                results.values = filteredData;
                results.count = filteredData.size();
                return results;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {

                //listAdapter.getData().clear();
                listAdapter.setData((List<ToDo>) filterResults.values);
                listAdapter.notifyDataSetChanged();

            }
        }
    }

并称之为

listAdapter.getFilter().filter(query);

欲了解更多信息,请点击这里

希望它能解决您的问题...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Xamarin Android搜索回收站查看项目

来自分类Dev

如何在Android中将数据从服务器显示到回收站视图中

来自分类Dev

火花滤清器的酸洗错误

来自分类Dev

专注于回收站查看项目

来自分类Dev

回收站视图(Xamarin Android)

来自分类Dev

回收驱动器上的回收站

来自分类Dev

在回收站中单击查看错误的位置

来自分类Dev

如何在回收站中查看文件的原始路径?

来自分类Dev

在回收站查看项目点击新片段

来自分类Dev

查看来自NERDTree的文件元数据

来自分类Dev

无休止的回收站视图重复json数据

来自分类Dev

回收站适配器未设置某些数据

来自分类Dev

无休止的回收站视图重复json数据

来自分类Dev

当回收站视图中的数据项增加时,回收站视图数据将位于文本视图下

来自分类Dev

Android:控制平滑滚动浏览回收站视图

来自分类Dev

返回后的Kotlin Android片段空回收站视图

来自分类Dev

如何在Android的回收站视图中运行for循环?

来自分类Dev

Android:在回收站视图中设置文本

来自分类Dev

Android:片段内的多个回收站视图

来自分类Dev

回收站视图错误

来自分类Dev

回收站如何工作?

来自分类Dev

SSD上的回收站

来自分类Dev

如何索引回收站?

来自分类Dev

将 JSON 数据从服务器保存到回收站视图仅显示最后一个 JSON 项目

来自分类Dev

回收站查看其他项目不同项目的装饰

来自分类Dev

如何查看来自父控制器的指令变量?

来自分类Dev

如何查看来自服务器的用户请求?

来自分类Dev

greendao list查看来自实体的所有数据

来自分类Dev

有什么办法可以查看来自蓝牙的数据?