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);