在我的Android应用程序中,当用户打开他们的应用程序时,我从数据库中获取所有项目,为每个项目创建一个POJO UserItem(id,name,price等),然后将所有这些UserItem对象放入我可以传递的LinkedHashSet
当他们打开My Items screem时,它获取LinkedHashSet并使用增强的for循环,创建多个ArrayLists(id的数组列表,名称的数组列表等),以便用数据填充ListView项目
然后用户单击其中一个列表项,我想启动项目配置文件活动并将整个UserItem对象传递给它(而不是传递ID并对此项目的信息执行另一个数据库查询(因为我已经在UserItem对象中有这个信息))
我该怎么做?
我无法通过userItem.getId()从LinkedHashSet获取UserItem对象,因为LinkedHashSets不支持此功能。
以下是一些代码:
public class MyProfileItemAdapter extends BaseAdapter {
private ArrayList<String> itemNames = new ArrayList<String>();
private ArrayList<Double> itemPrices = new ArrayList<Double>();
private ArrayList<Integer> itemIds = new ArrayList<Integer>();
private Context context;
private LinkedHashSet<UserItem> myItems;
private LayoutInflater layoutInflater;
static class ViewHolder {
ImageWebView iMyItemsFeedItemImage;
TextView tvMyItemsFeedItemName;
TextView tvMyItemsFeedItemPrice;
}
public MyProfileItemAdapter(Context context, LinkedHashSet<UserItem> myItems) {
this.context = context;
this.myItems = myItems;
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
fillDataInArrays(myItems);
}
@Override
public int getCount() {
return itemIds.size();
}
@Override
public Object getItem(int arg0) {
return itemIds.get(arg0);
}
@Override
public long getItemId(int position) {
return itemIds.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.item_adapterable_my_profile_item, parent, false);
}
ViewHolder holder = new ViewHolder();
holder.iMyItemsFeedItemImage = (ImageWebView) convertView.findViewById(R.id.iMyItemsFeedItemImage);
holder.tvMyItemsFeedItemName = (TextView) convertView.findViewById(R.id.tvMyItemsFeedItemName);
holder.tvMyItemsFeedItemPrice = (TextView) convertView.findViewById(R.id.tvMyItemsFeedItemPrice);
convertView.setTag(holder);
holder.tvMyItemsFeedItemName.setText(itemNames.get(position));
holder.tvMyItemsFeedItemPrice.setText("$" + String.valueOf(itemPrices.get(position)));
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Transporter is a custom class for easy passing different objects to other activities
Transporter.instance().userItem = ???; // TODO how to get the item with this ID?
Intent itemProfile = new Intent (context, ItemProfile.class);
context.startActivity(itemProfile);
}
});
return convertView;
} // End of getView
private void fillDataInArrays(LinkedHashSet<UserItem> myItems) {
for (UserItem userItem : myItems) {
itemIds.add(userItem.getItemId());
itemNames.add(userItem.getItemName());
itemBrands.add(userItem.getItemBrand());
itemPrices.add(userItem.getItemPriceAquired());
itemImages.add(userItem.getItemImage());
}
}
} // End of Class
UserItem(不是全部,有很多字段)
public class UserItem {
private int itemId;
private String itemName;
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public int getItemId() {
return itemId;
}
public void setItemId(int itemId) {
this.itemId = itemId;
}
} // End of Class
转运班:
public class Transporter {
public Transporter() {
}
static Transporter transporter = null;
public static Transporter instance() {
if (transporter == null) {
transporter = new Transporter();
}
return transporter;
}
public LinkedHashSet<ItemImage> itemImages;
public UserItem userItem;
} // End of Class
答案 0 :(得分:1)
您需要设置用户项parcelable
public class UserItem {
private int itemId;
private String itemName;
private UserItem(Parcel in) {
itemId = in.readInt();
itemName = in.readString();
}
...
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(itemId);
dest.writeString(itemName);
}
public static final Creator<UserItem> CREATOR = new Creator<UserItem>() {
@Override
public AppStoreItem createFromParcel(Parcel parcel) {
return new UserItem(parcel);
}
@Override
public UserItem[] newArray(int i) {
return new UserItem[i];
}
};
} //班级结束
答案 1 :(得分:0)
因此,您可以通过
获得所需项目的ID long id = getItemId(position);
迭代并寻找它
LinkedHashSet<UserItem> set = new LinkedHashSet<UserItem>();
...
Iterator<UserItem> iter = set.iterator();
UserItem item = null;
while (item == null && iter.hasNext()) {
UserItem local = iter.next();
if (local.getId() == id) {
item = local;
}
}
显然,不是创建LinkedHashSet<UserItem> set
,而是使用您在其他地方创建的集合