【问题标题】:populating Spinner nested in ListView Rows (Android)填充嵌套在 ListView Rows (Android) 中的 Spinner
【发布时间】:2014-09-08 00:25:45
【问题描述】:

我有一个列表视图,其中每一行显示一些库存项目的名称、可用数量,以及一个用于选择要购买的项目数量的微调器(单击页面底部的“购买”时,选择的数量每个微调器都被抓取和处理)。

我目前有一个循环遍历行并通过其标识符抓取微调器。它使用该行的位置来访问另一个数组,该数组包含在该位置显示的项目的相应数量。它使用这个数量作为另一个嵌套循环的停止点,该循环创建一个由给定数量的数字组成的 ArrayList(因此用户不能选择超过可用数量)。然后将 ArrayList 作为数据字段弹出到自定义 ArrayAdapter 中,但由于某种原因,ArrayAdapter 没有填充微调器。缺少什么??

相关代码

public class PlaceOrder extends Activity {

ArrayList<Item> items;
ArrayList<Customer> customers;
int position;

ListView orderList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_place_order);

    Intent data = getIntent();
    items = data.getParcelableArrayListExtra("items");
    customers = data.getParcelableArrayListExtra("customers");
    position = data.getIntExtra("position", 0);

    orderList = (ListView) findViewById(R.id.purchaseList);
    PurchasedItemAdapter itemAdapter = new PurchasedItemAdapter(this, R.layout.purchase_table_row, items);
    orderList.setAdapter(itemAdapter);

    for (int i = 0; i < orderList.getCount(); i++) {
        View view = orderList.getAdapter().getView(i, null, null);
        Spinner spinner = (Spinner) view.findViewById(R.id.purchase_table_spinner);
        int stop = items.get(i).qtyAvailable;
        ArrayList<String> stringList = new ArrayList<String>();
        for (int k = 0; k <= stop; k++) {
            stringList.add(String.format("%d", k));
        }
        SpinnerAdapter spinnerAdapter = new SpinnerAdapter(this, R.layout.simple_spinner_item, stringList);
        spinner.setAdapter(spinnerAdapter);
    }



}

适配器类...

public class SpinnerAdapter extends ArrayAdapter<String> {

Context context;
int layoutResourceId;
ArrayList<String> data = null;

public SpinnerAdapter (Context context, int layoutResourceId, ArrayList<String> data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ViewHolder();
        holder.qty = (TextView)row.findViewById(R.id.simple_spinner_text);

        row.setTag(holder);
    } else {
        holder = (ViewHolder)row.getTag();
    }

    holder.qty.setText(data.get(position));

    return row;
}

static class ViewHolder {
    TextView qty;
}

}

列表视图适配器..

public class PurchasedItemAdapter extends ArrayAdapter<Item> {
Context context;
int layoutResourceId;
ArrayList<Item> data = null;

public PurchasedItemAdapter(Context context, int layoutResourceId, ArrayList<Item> data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ItemHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new ItemHolder();
        holder.name = (TextView)row.findViewById(R.id.purchase_table_itemName);
        holder.qty = (TextView)row.findViewById(R.id.purchase_table_qty);

        row.setTag(holder);
    } else {
        holder = (ItemHolder)row.getTag();
    }

    Item item = data.get(position);
    holder.name.setText(item.name);
    holder.qty.setText(String.format("%d", item.qtyAvailable));

    return row;
}

static class ItemHolder {
    TextView name;
    TextView qty;

}

}

【问题讨论】:

  • 请贴出PurchableItemAdapter的代码

标签: java android listview


【解决方案1】:

如果 PurchasedItemAdapter 是每行的自定义列表适配器 spinnerAdapter(如果每行的微调器不同)适合在 PurchasedItemAdapter 类中设置,或者至少最好在 PurchasedItemAdapter 之前设置微调器适配器 “每个微调器的选定数量被抓取和处理”所以列表的每一行都有一个微调器为什么不将它设置在 PurchaseItemAdapter 中并在视图 Holder 类中添加一个微调器项目......我会这样做

【讨论】:

  • 我将微调器适配器分配给 PurchasedItemAdapter 内的微调器,现在一切正常。谢谢大佬
  • 当我从某个微调器中选择某行时,如何通知微调器的适配器数据集已更改?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多