【发布时间】:2017-03-23 23:29:06
【问题描述】:
所以基本上我正在编写一个Activity,它在RecyclerView 中显示海滩列表。假设发生的情况是,在上面的搜索菜单中,当用户开始输入他们正在寻找的海滩时,海滩列表最终会缩小到他们正在寻找的海滩。所以我实际上是在我的最后一行代码上让它完全正常运行,但我在这一行的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;
}
}
如你所见,我的错误在上面的adapter.setFilter(newlist);
beachalbum.java
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;
}
}
最后 RecyclerAdapterBeaches.java
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();}
}
请提供您的帮助。
【问题讨论】:
-
setFilter 上的错误 - 什么错误?
标签: java android-studio arraylist