Android 使用适配器将项目加载到可扩展列表视图

Android 使用适配器将项目加载到可扩展列表视图,android,adapter,android-viewholder,Android,Adapter,Android Viewholder,我试图在两个活动之间传输数据,然后使用适配器显示。前面我使用了相同的适配器来显示列表,但这在我的适配器中给出了两个错误,我在下面的代码中显示了它们 谁知道我该怎么做才能纠正它。任何帮助都将不胜感激 通过这些细节的第一个活动 intent.putExtra("quantity", quantity); intent.putExtra("instructions", ins

我试图在两个活动之间传输数据,然后使用适配器显示。前面我使用了相同的适配器来显示列表,但这在我的适配器中给出了两个错误,我在下面的代码中显示了它们

谁知道我该怎么做才能纠正它。任何帮助都将不胜感激

通过这些细节的第一个活动

                                intent.putExtra("quantity", quantity);
                                intent.putExtra("instructions", instructions);
                                intent.putExtra("subTotal", subTotal);
                                intent.putExtra("description", description);
                                intent.putExtra("price", price);
第二项活动

        String quantity = getIntent().getStringExtra("quantity");
        String description = getIntent().getStringExtra("description");
        String subTotal = getIntent().getStringExtra("subTotal");
        String price = getIntent().getStringExtra("price");

        CustomGridPastaCart adapter = new CustomGridPastaCart(getApplicationContext(),
                quantity, description, subTotal, price); //error2
CustomGridPastaCart,BaseAdapter

public class CustomGridPastaCart extends BaseAdapter {
private Context context;
List<Item> items;

public CustomGridPastaCart(Context c, List<Item> items) {
    this.items = items;
}

public CustomGridPastaCart(Context applicationContext, String quantity, //it was forcing me to generate this error2 in above
        String description, String subTotal, String price) {
    // TODO Auto-generated constructor stub
}

@Override
public int getCount() {
    return items.size();
}

@Override
public Item getItem(int position) { //here i had to change object to Item because it gave an error1 in below
    return items.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = LayoutInflater.from(context).inflate(
            R.layout.cart_activity, parent, false);
        holder.tvHeader = (TextView) convertView
            .findViewById(R.id.lblListHeader);
        holder.tvUnitprice = (TextView) convertView
            .findViewById(R.id.lbl_unitprice);
        holder.tvQty = (TextView) convertView.findViewById(R.id.lbl_qty);
        holder.ivSubtotal = (TextView) convertView
            .findViewById(R.id.lblsubtotal);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    // Get item...
    Item item = getItem(position); //error1 here

    // Set values.
    holder.tvHeader.setText(item.description);
    holder.tvUnitprice.setText(item.price);
    holder.tvQty.setText(item.quantity);
    holder.ivSubtotal.setText(item.subTotal);

    return convertView;
}

private class ViewHolder {
   private TextView tvHeader;
   private TextView tvUnitprice;
   private TextView tvQty;
   private TextView ivSubtotal;

您使用的适配器不正确。ListView需要一个适配器,它基本上是一个包含列表(或数组)的结构,以及处理它并创建表示每个项的视图的方法

您正在传递单个项目的字段,因此
description
是一个字符串,因此此操作失败:

@Override
public int getCount() {
    return description.size(); //The method size() is undefined for the type String
}
getItem

@Override
public Object getItem(int position) { 
    return description.get(position); //The method get(int) is undefined for the type String
}
您需要为适配器实现如下内容:

public class CustomGridPastaCart extends BaseAdapter {
    private Context context;
    List<Item> items;

    public CustomGridPastaCart(Context c, List<Item> items) {
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) { 
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(
                R.layout.cart_activity, parent, false);
            holder.tvHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
            holder.tvUnitprice = (TextView) convertView
                .findViewById(R.id.lbl_unitprice);
            holder.tvQty = (TextView) convertView.findViewById(R.id.lbl_qty);
            holder.ivSubtotal = (TextView) convertView
                .findViewById(R.id.lblsubtotal);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // Get item...
        Item item = getItem(position);

        // Set values.
        holder.tvHeader.setText(item.description);
        holder.tvUnitprice.setText(item.price);
        holder.tvQty.setText(item.quantity);
        holder.ivSubtotal.setText(String.valueOf(item.subTotal));

        return convertView;
    }

    private class ViewHolder {
       private TextView tvHeader;
       private TextView tvUnitprice;
       private TextView tvQty;
       private TextView ivSubtotal;
   }
}

测试:

String quantity=getIntent().getStringExtra(“数量”);
字符串描述=getIntent().getStringExtra(“描述”);
字符串小计=getIntent().getStringExtra(“小计”);
字符串价格=getIntent().getStringExtra(“价格”);
项目=新项目();
item.quantity=数量;
item.description=描述;
item.subTotal=小计;
项目价格=价格;
ArrayList=新建ArrayList();
列表。添加(项目);
CustomGridPastaCart适配器=新的CustomGridPastaCart(getApplicationContext(),list);

我在该行中得到一个错误Item=getItem(position);类型不匹配:无法从此行holder.ivSubtotal.setText(item.subTotal)中从对象转换为项;------类型TextView中的方法setText(CharSequence)不适用于参数(double)是的,它是一个double。将其转换为字符串。我会更新答案。你能检查我编辑的问题吗。我已更新到我的最新代码。我犯了两个错误,我克服了它们。但是你能看看错误1和2吗。我不确定我纠正错误的方式。你能告诉我哪里出错了吗?问题是你传递给适配器构造函数的参数与实际的构造函数不匹配。我缺少一点:您使用列表来显示项目列表。这就是你需要的吗?如果查看适配器构造函数,它将收到一个项目列表。每个项目都有数量、说明、小计、价格,但您通过附加项只传递每个字段中的一个。您能否发布列表的屏幕截图或模式,以检查您希望如何显示数据?
public class CustomGridPastaCart extends BaseAdapter {
    private Context context;
    List<Item> items;

    public CustomGridPastaCart(Context c, List<Item> items) {
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) { 
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(
                R.layout.cart_activity, parent, false);
            holder.tvHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
            holder.tvUnitprice = (TextView) convertView
                .findViewById(R.id.lbl_unitprice);
            holder.tvQty = (TextView) convertView.findViewById(R.id.lbl_qty);
            holder.ivSubtotal = (TextView) convertView
                .findViewById(R.id.lblsubtotal);
            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // Get item...
        Item item = getItem(position);

        // Set values.
        holder.tvHeader.setText(item.description);
        holder.tvUnitprice.setText(item.price);
        holder.tvQty.setText(item.quantity);
        holder.ivSubtotal.setText(String.valueOf(item.subTotal));

        return convertView;
    }

    private class ViewHolder {
       private TextView tvHeader;
       private TextView tvUnitprice;
       private TextView tvQty;
       private TextView ivSubtotal;
   }
}
public class Item {
    String quantity;
    String description;
    double subTotal;
    String price;
}
String quantity = getIntent().getStringExtra("quantity");
String description = getIntent().getStringExtra("description");
String subTotal = getIntent().getStringExtra("subTotal");
String price = getIntent().getStringExtra("price");

Item item = new Item();
item.quantity = quantity;
item.description = description;
item.subTotal = subTotal;
item.price = price;

ArrayList<Item> list = new ArrayList<Item>();
list.add(item);

CustomGridPastaCart adapter = new CustomGridPastaCart(getApplicationContext(), list);