我正在开发一个应用程序,该应用程序在列表视图中靠近餐厅,用户也可以将其存储在收藏夹列表中。 启动应用程序后,将加载by by附近的地方。我想检查收藏夹中是否有附近的地点,如果有,则应选中其复选框(用于将地点标记为收藏夹的复选框)。 它应根据其名称检查“最爱列表”中是否已存在某个附近的地方,如果存在,则应选中“最喜欢的”复选框。 提前致谢! :) 这是我的适配器代码:
public class RestaurantAdapter extends ArrayAdapter<PlaceDetailsClass>
{
Context context;
ArrayList<PlaceDetailsClass> placeDetailsClassArrayList;
ArrayList<PlaceDetailsClass> favouriteList;
private DatabaseHelper db;
public RestaurantAdapter(Context context, ArrayList<PlaceDetailsClass> placeDetailsClassArrayList)
{
super(context, R.layout.restaurant_list_item, placeDetailsClassArrayList);
this.context=context;
this.placeDetailsClassArrayList = placeDetailsClassArrayList;
db=new DatabaseHelper(context);
Log.w("ArrayList in resAdapter",placeDetailsClassArrayList.toString());
this.favouriteList = new ArrayList<>(db.getAllPlaces("restaurant"));
}
public static class Holder
{
TextView nameTv;
TextView vicinityTv;
CheckBox favourite;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final PlaceDetailsClass data = getItem(position);
final Holder viewHolder;
if (convertView == null)
{
viewHolder = new Holder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.restaurant_list_item, parent, false);
viewHolder.nameTv = (TextView) convertView.findViewById(R.id.tv_restaurantname);
viewHolder.vicinityTv = (TextView) convertView.findViewById(R.id.tv_restaurantvicinity);
viewHolder.favourite = (CheckBox) convertView.findViewById(R.id.chkbx_favourite);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (Holder) convertView.getTag();
}
viewHolder.favourite.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(viewHolder.favourite.isChecked())
{
db.addToFavourites(context.getString(R.string.restaurant), data.getName(),data.getVicinity(),data.getRating(),data.getLatitude(),data.getLongitude(),1);
Toast.makeText(context,data.getName()+" "+context.getString(R.string.addToFav), Toast.LENGTH_SHORT).show();
}
else
{
db.removePlace(data.getName());
Toast.makeText(context, data.getName()+" "+context.getString(R.string.removeFromFav), Toast.LENGTH_SHORT).show();
}
}
});
viewHolder.nameTv.setText(data.getName());
viewHolder.vicinityTv.setText(data.getVicinity());
if(data.getFavourite()==1)
{
viewHolder.favourite.setChecked(true);
}
else
{
viewHolder.favourite.setChecked(false);
}
return convertView;
}
@Override
public int getViewTypeCount()
{
return getCount();
}
@Override
public int getItemViewType(int position)
{
return position;
}
@Override
public int getCount()
{
return placeDetailsClassArrayList.size();
}
@Override
public long getItemId(int position)
{
return position;
}
}
答案 0 :(得分:1)
也许您可以使用apache collectionUtils并执行以下操作:
CollectionUtils.intersection(favoriteList, placeDetailsClassArrayList).forEach(place -> place.setIsFavourite(true));
答案 1 :(得分:1)
好吧,如果您真的想遍历ArrayList
,则可以先获取要搜索的值。例如。 theNameYouWantToLookFor
。然后循环遍历:
for(PlaceDetailsClass favourite : favouriteList) {
if(favourite.getName().equals(theNameYouWantToLookFor)) {
// Found, check the checkbox
}
}
但是,您实际上并不想在UIThread
上执行此操作,并且由于您正在使用这些值的数据库,因此我会立即从数据库中检索收藏夹,并添加一些{{1} }到您的boolean
能否根据数据库中的值设置为View
。
答案 2 :(得分:0)
我建议您在数据库中创建另一个表来存储收藏夹。并在其中保存地点ID。
然后在数据库助手中编写一个方法,以检查该ID是否存在于收藏夹表中。
此SQL代码可能会帮助您:
"SELECT * FROM favorites WHERE id =" + id