Android 使用适配器在RecyclerView中搜索特定单词
我有一个带有工具栏的活动,我正在调用由recyclerview组成的片段,在工具栏中有搜索选项,当我使用文本搜索时,recyclerview应该得到过滤。请帮帮我 这是我的密码 在活动中,我有工具栏-Android 使用适配器在RecyclerView中搜索特定单词,android,search,filter,android-recyclerview,Android,Search,Filter,Android Recyclerview,我有一个带有工具栏的活动,我正在调用由recyclerview组成的片段,在工具栏中有搜索选项,当我使用文本搜索时,recyclerview应该得到过滤。请帮帮我 这是我的密码 在活动中,我有工具栏- public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); final MenuItem item = menu.findItem(R.i
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
final MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)
MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(new
SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
System.out.println("Clicked...");
search = newText;
return false;
}
});
System.out.println("Item : "+item);
return true;
}
在片段中,我有recyclerview,它在其中设置适配器
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mRecyclerView = (RecyclerView)view.findViewById(R.id.recyclerview);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new MyRecyclerViewAdapter(results);
}
在MyRecycleServiceAdapter中-
public class MyRecyclerViewAdapter extends RecyclerView
.Adapter<MyRecyclerViewAdapter
.DataObjectHolder> {
private static String LOG_TAG = "MyRecyclerViewAdapter";
public static ArrayList<DataObject> mDataset;
public static ArrayList<DataObject> mFilteredList;
private static MyClickListener myClickListener;
View view;
public class DataObjectHolder extends RecyclerView.ViewHolder
implements View.OnClickListener, Filterable {
ImageView img;
TextView label;
ImageView img_navi;
TextView txt_add;
TextView txt_id;
TextView txt_desc;
ImageView img1;
TextView name;
TextView title_desc;
CircularImageView profile_img;
public DataObjectHolder(View itemView) {
super(itemView);
img = (ImageView)itemView.findViewById(R.id.img);
label = (TextView) itemView.findViewById(R.id.txt_issues);
img_navi = (ImageView) itemView.findViewById(R.id.img_navi);
txt_add = (TextView)itemView.findViewById(R.id.txt_add);
txt_id = (TextView)itemView.findViewById(R.id.txt_id);
txt_desc = (TextView)itemView.findViewById(R.id.txt_desc);
img1 = (ImageView) itemView.findViewById(R.id.img1);
name = (TextView)itemView.findViewById(R.id.txt_name);
profile_img = (CircularImageView)
itemView.findViewById(R.id.img_pic);
title_desc = (TextView)itemView.findViewById(R.id.title_desc);
Log.i(LOG_TAG, "Adding Listener");
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence
charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
mFilteredList = mDataset;
} else {
ArrayList<DataObject> filteredList = new ArrayList<>();
for (DataObject dataObject : mDataset) {
if (dataObject.getmText1().toLowerCase().contains(charString) || dataObject.getmText2().toLowerCase().contains(charString) || dataObject.getmText3().toLowerCase().contains(charString) || dataObject.getmText4().toLowerCase().contains(charString) || dataObject.getmText5().toLowerCase().contains(charString)|| dataObject.getmText6().toLowerCase().contains(charString)) {
filteredList.add(dataObject);
}
}
mFilteredList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = mFilteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
mFilteredList = (ArrayList<DataObject>) filterResults.values;
notifyDataSetChanged();
}
};
}
}
public void setOnItemClickListener(MyClickListener myClickListener) {
this.myClickListener = myClickListener;
}
public MyRecyclerViewAdapter(ArrayList<DataObject> myDataset) {
mDataset = myDataset;
mFilteredList = myDataset;
}
@Override
public DataObjectHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
if(MyComplaintsFragment.my_complaints == true){
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_row1, parent, false);
}
else {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_row, parent, false);
}
DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
return dataObjectHolder;
}
@Override
public void onBindViewHolder(DataObjectHolder holder, int position) {
holder.img.setImageResource(R.drawable.play);
holder.label.setText(mDataset.get(position).getmText6());
holder.img_navi.setImageResource(R.drawable.navigation);
holder.txt_add.setText(mDataset.get(position).getmText2());
holder.txt_id.setText(mDataset.get(position).getmText3());
holder.txt_desc.setText(mDataset.get(position).getmText4());
holder.name.setText(mDataset.get(position).getmText5());
holder.title_desc.setText(mDataset.get(position).getmText1());
holder.img1.setImageResource(R.drawable.i1);
}
public void addItem(DataObject dataObj, int index) {
mDataset.add(index, dataObj);
notifyItemInserted(index);
}
public void deleteItem(int index) {
mDataset.remove(index);
notifyItemRemoved(index);
}
@Override
public int getItemCount() {
return mDataset.size();
}
public interface MyClickListener {
public void onItemClick(int position, View v);
}
}
公共类MyRecycleServiceAdapter扩展了RecyclerView
.适配器{
私有静态字符串LOG_TAG=“MyRecycleServiceAdapter”;
公共静态ArrayList mDataset;
公共静态数组列表mFilteredList;
私有静态MyClickListener MyClickListener;
视图;
公共类DataObjectHolder扩展了RecyclerView.ViewHolder
实现View.OnClickListener,可筛选{
图像视图img;
文本视图标签;
ImageView img_navi;
文本视图txt_添加;
TextView txt_id;
TextView txt_desc;
ImageView img1;
文本视图名称;
文本视图标题描述;
圆形视图剖面图;
公共数据对象持有者(视图项视图){
超级(项目视图);
img=(ImageView)itemView.findViewById(R.id.img);
label=(TextView)itemView.findViewById(R.id.txt_问题);
img_navi=(ImageView)itemView.findviewbyd(R.id.img_navi);
txt_add=(TextView)itemView.findViewById(R.id.txt_add);
txt_id=(TextView)itemView.findViewById(R.id.txt_id);
txt_desc=(TextView)itemView.findViewById(R.id.txt_desc);
img1=(ImageView)itemView.findViewById(R.id.img1);
name=(TextView)itemView.findViewById(R.id.txt\u name);
纵断面图_img=(CircularImageView)
itemView.findViewById(R.id.img_pic);
title_desc=(TextView)itemView.findViewById(R.id.title_desc);
i(Log_标记,“添加侦听器”);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的过滤器结果执行过滤(CharSequence
字符序列){
String charString=charSequence.toString();
if(charString.isEmpty()){
mFilteredList=mDataset;
}否则{
ArrayList filteredList=新建ArrayList();
用于(数据对象数据对象:mDataset){
如果(dataObject.getmText1().toLowerCase().contains(charString)| dataObject.getmText2().toLowerCase().contains(charString)| dataObject.getmText3().toLowerCase().contains(charString)| dataObject.getmText4().toLowerCase().contains(charString)| dataObject.getmText5().toLowerCase().contains(charString)| dataObject.getmText6().toLowerCase().contains(字符串)){
添加(数据对象);
}
}
mFilteredList=filteredList;
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=mFilteredList;
返回过滤器结果;
}
@凌驾
受保护的无效发布结果(CharSequence CharSequence、FilterResults FilterResults){
mFilteredList=(ArrayList)filterResults.values;
notifyDataSetChanged();
}
};
}
}
public void setOnItemClickListener(MyClickListener MyClickListener){
this.myClickListener=myClickListener;
}
公共MyRecycleServiceAdapter(ArrayList myDataset){
mDataset=myDataset;
mFilteredList=myDataset;
}
@凌驾
public DataObjectHolder onCreateViewHolder(视图组父级,
int视图类型){
if(MyComplaintsFragment.my_complaints==true){
view=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u row1,父级,假);
}
否则{
view=LayoutInflater.from(parent.getContext())
.充气(R.layout.card\u view\u row,父级,错误);
}
DataObjectHolder DataObjectHolder=新的DataObjectHolder(视图);
返回数据对象持有者;
}
@凌驾
public void onBindViewHolder(DataObjectHolder,int位置){
holder.img.setImageResource(R.drawable.play);
holder.label.setText(mDataset.get(position.getmText6());
holder.img_navi.setImageResource(R.drawable.navigation);
holder.txt_add.setText(mDataset.get(position.getmText2());
holder.txt_id.setText(mDataset.get(position.getmText3());
holder.txt_desc.setText(mDataset.get(position.getmText4());
holder.name.setText(mDataset.get(position.getmText5());
holder.title_desc.setText(mDataset.get(position.getmText1());
holder.img1.setImageResource(R.drawable.i1);
}
public void addItem(DataObject dataObj,int index){
添加(索引,dataObj);
插入的项目(索引);
}
公共void deleteItem(int索引){
mDataset.remove(索引);
删除的项目(索引);
}
@凌驾
public int getItemCount(){
返回mDataset.size();
}
公共接口MyClickListener{
公共位置(内部位置,视图v);
}
}
如何从适配器使用getFilter
谢谢您您主要关心的是如何与
fargment
沟通搜索视图
?。可以进行通信sear