且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Android - 添加 ArrayList 中的项目后动态更新自定义 ListView

更新时间:2023-10-15 08:10:40

您的适配器没有获得新数据,因为您正在使用它自己的一组数据对其进行初始化.

Your adapter does not get the new data, because you are initializing it with its own set of data.

一种可能性是实例化一个新的适配器并将其分配给 ListView.

One possibility would be to instantiate a new adapter and assign it to the ListView.

在您的活动中为您的 ListView 添加一个字段:

Add a field for your ListView in your activity:

public TextView tv;
private int variantPosition; 
CustomListAdapter customListAdapter;
CurrentOrderClass currentOrder = new CurrentOrderClass();
ListView myListView; //Listview here

在 onCreate 中,将 myListView 设置为指向您的 ListView:

In onCreate, set myListView to point to your ListView:

final ListView lv1 = (ListView) findViewById(R.id.listViewProductOrder)
myListView = lv1;

最后,当你改变你的数据时,为新数据创建一个新的Adapter:

Finally, when you change your data, create a new Adapter for the new data:

myListView.setAdapter(new CustomListAdapter(this, getListData());

或者,修改您的自定义适配器以包含 setListData 方法:

Alternatively, modify your Custom adapter to contain a setListData method:

public class CustomListAdapter extends BaseAdapter {

  private ArrayList<CurrentOrderClass> listData;

  private LayoutInflater layoutInflater;

  public CustomListAdapter(Context context, ArrayList<CurrentOrderClass> listData) {
    this.listData = listData;
    layoutInflater = LayoutInflater.from(context);
  }

  public void setListData(ArrayList<CurrentOrderClass> data){
    listData = data;
  }

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


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

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

  public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
        holder = new ViewHolder();
        holder.variantView = (TextView) convertView.findViewById(R.id.variant);
        holder.unitView = (TextView) convertView.findViewById(R.id.unit);
        holder.quantityView = (TextView) convertView.findViewById(R.id.quantity);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.variantView.setText(listData.get(position).getVariantArray().get(position).toString());
    holder.unitView.setText(listData.get(position).getUnitArray().get(position).toString());
    holder.quantityView.setText(String.valueOf(listData.get(position).getQuantityRow()));

    return convertView;
}

  static class ViewHolder {
    TextView variantView;
    TextView unitView;
    TextView quantityView;
  }


}

然后,修改数据后,只需调用:

Then, after modifying your data, just call:

customListAdapter.setListData(getListData());
customListAdapter.notifyDataSetChanged();