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上的错误-什么错误?可能重复的