ListView适配器从LinkedHashSet <useritem>获取信息。如何将其中一个UserItem传递给下一个活动</useritem>

时间:2014-02-18 12:27:06

标签: java android listview android-listview

在我的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

2 个答案:

答案 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,而是使用您在其他地方创建的集合