Java 需要设置筛选器帮助

Java 需要设置筛选器帮助,java,android-studio,arraylist,Java,Android Studio,Arraylist,因此,基本上我正在编写一个活动,它在回收视图中显示海滩列表。假设发生的情况是,当用户开始在上面的搜索菜单中键入他们要查找的海滩时,海滩列表最终缩小到他们要查找的海滩。因此,我实际上是在我的最后一行代码中,为了让它完全发挥作用,但我一直在这行的setFilter部分出错 adapter.setFilter(newlist); 下面是我的代码,请告知 BeachActivity.java public class BeachActivity extends AppCompatActivity im

因此,基本上我正在编写一个
活动
,它在
回收视图
中显示海滩列表。假设发生的情况是,当用户开始在上面的搜索菜单中键入他们要查找的海滩时,海滩列表最终缩小到他们要查找的海滩。因此,我实际上是在我的最后一行代码中,为了让它完全发挥作用,但我一直在这行的
setFilter
部分出错

adapter.setFilter(newlist);
下面是我的代码,请告知

BeachActivity.java

public class BeachActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
    Toolbar toolbarbeach;
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
    RecyclerView.LayoutManager layoutManager;
    ArrayList<beachesalbum> arrayList = new ArrayList<>();
    String [] b_name = {"South Beach","North Beach","Another Beach","Beachman"};
    int [] b_pic = {R.drawable.b1,R.drawable.b2,R.drawable.b3,R.drawable.b4,};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_beach);
        toolbarbeach=(Toolbar)findViewById(R.id.toolbar_beaches);
        setSupportActionBar(toolbarbeach);
        getSupportActionBar().setTitle("Beaches");
        recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
        layoutManager = new GridLayoutManager(this,2);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);

        int count = 0;

        for (String Name :b_name)
        {
            arrayList.add(new beachesalbum(Name,b_pic[count]));
            count++;
        }
        adapter = new RecyclerAdapterBeaches(arrayList);
        recyclerView.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_items,menu);
        MenuItem menuItem = menu.findItem(R.id.beachsearch);
        SearchView searchView = (SearchView)MenuItemCompat.getActionView(menuItem);
        searchView.setOnQueryTextListener(this);
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        newText = newText.toLowerCase();
        ArrayList<beachesalbum> newlist = new ArrayList <>();

        for(beachesalbum beachesalbum : arrayList)
        {
            String name = beachesalbum.getName().toLowerCase();
            if (name.contains(newText));
            newlist.add(beachesalbum);
        }
        adapter.setFilter(newlist);

        return true;
    }
}
public class beachesalbum {
    private int img_id;
    private String name;
    public beachesalbum(String name,int img_id)
    {
        this.setName(name);
        this.setImg_id(img_id);
    }

    public int getBeach_id() {
        return beach_id;
    }

    public void setBeach_id(int beach_id) {
        this.beach_id = beach_id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private int beach_id;

    beachesalbum(int img_id)
    {
        setImg_id(img_id);
    }



    public int getImg_id() {
        return img_id;
    }

    public void setImg_id(int img_id) {
        this.img_id = img_id;
    }
}
public class RecyclerAdapterBeaches extends     RecyclerView.Adapter<RecyclerAdapterBeaches.BeachesViewHolder>{
    ArrayList<beachesalbum> arrayList = new ArrayList<>();
    RecyclerAdapterBeaches(ArrayList<beachesalbum>arrayList)
    {
        this.arrayList = arrayList;
    }
    @Override
    public BeachesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);

        return new BeachesViewHolder(view);
    }

    @Override
    public void onBindViewHolder(BeachesViewHolder holder, int position) {
        holder.b_pic.setImageResource(arrayList.get(position).getImg_id());
       holder.b_id.setText(arrayList.get(position).getName());

    }

    @Override
   public int getItemCount() {

        return arrayList.size();
    }
    public static class BeachesViewHolder extends RecyclerView.ViewHolder
    {
        ImageView b_pic;
        TextView b_id;

        public BeachesViewHolder(View itemView) {
            super(itemView);
            b_pic=(ImageView)itemView.findViewById(R.id.beachpic);
            b_id=(TextView)itemView.findViewById(R.id.beaches_id);

        }
    }

    public void setFilter(ArrayList<beachesalbum>newlist)
    {arrayList=new ArrayList<>();
    arrayList.addAll(newlist);
    notifyDataSetChanged();}
}
最后 RecyclerAdapterBeats.java

public class BeachActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
    Toolbar toolbarbeach;
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
    RecyclerView.LayoutManager layoutManager;
    ArrayList<beachesalbum> arrayList = new ArrayList<>();
    String [] b_name = {"South Beach","North Beach","Another Beach","Beachman"};
    int [] b_pic = {R.drawable.b1,R.drawable.b2,R.drawable.b3,R.drawable.b4,};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_beach);
        toolbarbeach=(Toolbar)findViewById(R.id.toolbar_beaches);
        setSupportActionBar(toolbarbeach);
        getSupportActionBar().setTitle("Beaches");
        recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
        layoutManager = new GridLayoutManager(this,2);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);

        int count = 0;

        for (String Name :b_name)
        {
            arrayList.add(new beachesalbum(Name,b_pic[count]));
            count++;
        }
        adapter = new RecyclerAdapterBeaches(arrayList);
        recyclerView.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_items,menu);
        MenuItem menuItem = menu.findItem(R.id.beachsearch);
        SearchView searchView = (SearchView)MenuItemCompat.getActionView(menuItem);
        searchView.setOnQueryTextListener(this);
        return true;
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        newText = newText.toLowerCase();
        ArrayList<beachesalbum> newlist = new ArrayList <>();

        for(beachesalbum beachesalbum : arrayList)
        {
            String name = beachesalbum.getName().toLowerCase();
            if (name.contains(newText));
            newlist.add(beachesalbum);
        }
        adapter.setFilter(newlist);

        return true;
    }
}
public class beachesalbum {
    private int img_id;
    private String name;
    public beachesalbum(String name,int img_id)
    {
        this.setName(name);
        this.setImg_id(img_id);
    }

    public int getBeach_id() {
        return beach_id;
    }

    public void setBeach_id(int beach_id) {
        this.beach_id = beach_id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private int beach_id;

    beachesalbum(int img_id)
    {
        setImg_id(img_id);
    }



    public int getImg_id() {
        return img_id;
    }

    public void setImg_id(int img_id) {
        this.img_id = img_id;
    }
}
public class RecyclerAdapterBeaches extends     RecyclerView.Adapter<RecyclerAdapterBeaches.BeachesViewHolder>{
    ArrayList<beachesalbum> arrayList = new ArrayList<>();
    RecyclerAdapterBeaches(ArrayList<beachesalbum>arrayList)
    {
        this.arrayList = arrayList;
    }
    @Override
    public BeachesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);

        return new BeachesViewHolder(view);
    }

    @Override
    public void onBindViewHolder(BeachesViewHolder holder, int position) {
        holder.b_pic.setImageResource(arrayList.get(position).getImg_id());
       holder.b_id.setText(arrayList.get(position).getName());

    }

    @Override
   public int getItemCount() {

        return arrayList.size();
    }
    public static class BeachesViewHolder extends RecyclerView.ViewHolder
    {
        ImageView b_pic;
        TextView b_id;

        public BeachesViewHolder(View itemView) {
            super(itemView);
            b_pic=(ImageView)itemView.findViewById(R.id.beachpic);
            b_id=(TextView)itemView.findViewById(R.id.beaches_id);

        }
    }

    public void setFilter(ArrayList<beachesalbum>newlist)
    {arrayList=new ArrayList<>();
    arrayList.addAll(newlist);
    notifyDataSetChanged();}
}
公共类RecyclerAdapter扩展了RecyclerView.Adapter{ ArrayList ArrayList=新的ArrayList(); 回收设施适应海滩(ArrayList) { this.arrayList=arrayList; } @凌驾 公共BeachesViewHolder onCreateViewHolder(视图组父级,int-viewType){ View-View=LayoutInflater.from(parent.getContext()).flate(R.layout.row\u布局,parent,false); 返回新的BeachesViewHolder(视图); } @凌驾 BindViewHolder上的公共无效(BeachesViewHolder,内部位置){ holder.b_pic.setImageResource(arrayList.get(position.getImg_id()); holder.b_id.setText(arrayList.get(position.getName()); } @凌驾 public int getItemCount(){ 返回arrayList.size(); } 公共静态类BeachesViewHolder扩展了RecyclerView.ViewHolder { 图像视图b_pic; 文本视图b_id; 公共BeachesViewHolder(视图项视图){ 超级(项目视图); b_pic=(ImageView)itemView.findviewbyd(R.id.beachpic); b_id=(TextView)itemView.findViewById(R.id.id); } } 公共void setFilter(ArrayListnewlist) {arrayList=新的arrayList(); arrayList.addAll(newlist); notifyDataSetChanged();} }
请提供帮助。

对于
RecyclerView.Adapter
,它是
适配器
变量的类型,
setFilter
函数不存在。由于您总是为其分配一个
RecyclerAdapterBeats
,因此您应该将其类型更改为该类型

否则,它无法确保对象具有
setFilter
功能

public class BeachActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
    Toolbar toolbarbeach;
    RecyclerView recyclerView;
    RecyclerAdapterBeaches adapter; // Update this line

    // ...
}

BeachActivity
中,您正在使用
arrayList
设置适配器
RecyclerView
适配器保留
arrayList
的引用。因此,如果需要从
回收视图中筛选出一些项目,则需要在
阵列列表中进行更改

@Override
public boolean onQueryTextChange(String newText) {
    newText = newText.toLowerCase();

    // Clear the arrayList first.
    arrayList.clear();

    // If the search text is empty, repopulate the arrayList
    if(newText.length == 0) {
        int count = 0;
        for (String Name :b_name) {
            arrayList.add(new beachesalbum(Name,b_pic[count]));
            count++;
        }
    }

    else {
        int count = 0;
        for (String Name :b_name) {
            if(Name.contains(newText))
                arrayList.add(new beachesalbum(Name,b_pic[count]));
            count++;
        }
    }

    adapter.setFilter(arrayList);

    return true;
}
以及适配器中的
setFilter
功能

public void setFilter(ArrayList<beachesalbum> newlist) {
    this.arrayList.clear();
    this.arrayList.addAll(newlist);
    notifyDataSetChanged();
}
setFilter上的错误-什么错误?可能重复的