Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不同的活动中使用两个arrayadapter更新一个arraylist中的数据_Java_Android_Arraylist_Android Arrayadapter - Fatal编程技术网

Java 如何在不同的活动中使用两个arrayadapter更新一个arraylist中的数据

Java 如何在不同的活动中使用两个arrayadapter更新一个arraylist中的数据,java,android,arraylist,android-arrayadapter,Java,Android,Arraylist,Android Arrayadapter,我试图在一个Arraylist中使用两个不同的ArrayAdapter(分别在两个活动中)。第一个ArrayAdapter执行数量增量,第二个执行减量。然后,来自第一个ArrayAdapter的所有数据将传输到第二个ArrayAdapter,但仅显示数量大于1的数据。之前的所有任务似乎都运行良好,直到我尝试减少一个数量(它显示数据减少),并尝试通过返回第一个活动和再次返回第二个活动来检查是否保存了更改。所发生的情况是,由减量所做的更改将被忽略,并从项目递增时重置数据。我知道这有点乱,但我希望你能

我试图在一个Arraylist中使用两个不同的ArrayAdapter(分别在两个活动中)。第一个ArrayAdapter执行数量增量,第二个执行减量。然后,来自第一个ArrayAdapter的所有数据将传输到第二个ArrayAdapter,但仅显示数量大于1的数据。之前的所有任务似乎都运行良好,直到我尝试减少一个数量(它显示数据减少),并尝试通过返回第一个活动和再次返回第二个活动来检查是否保存了更改。所发生的情况是,由减量所做的更改将被忽略,并从项目递增时重置数据。我知道这有点乱,但我希望你能帮我,我做错了什么

编辑:我使用两个ArrayAdapter,因为我想在第二个适配器中显示数量以及其他元素

这是我的密码:

java(增量适配器)

订单

Bundle bundle = getIntent().getExtras();

productList = bundle.getParcelableArrayList("productList");
filter = new ArrayList<myProduct>();
orderAdapter = new myOrderAdapter(getApplicationContext(),filter);

for(myProduct item : productList){

    if(item.productQuantity > 0){
        Log.d(TAG,item.getProductName());
        Log.d(TAG,"" + item.productQuantity());
        filter.add(item);
    }
    else if(item.productQuantity <= 0){
        filter.remove(item);
    }
}
orderListView.setAdapter(orderAdapter);
Bundle Bundle=getIntent().getExtras();
productList=bundle.getParcelableArrayList(“productList”);
过滤器=新的ArrayList();
orderAdapter=新的myOrderAdapter(getApplicationContext(),过滤器);
对于(myProduct项:productList){
如果(item.productQuantity>0){
Log.d(标记,item.getProductName());
Log.d(标记“”+item.productQuantity());
过滤。添加(项目);
}

否则,如果(item.productQuantity问题是您将数组作为包裹传递给第二个适配器,因此它基本上是对数组进行深度复制,而与原始数组无关。因此,第二个数组中的更改不会显示在第一个数组中。
一个简单(但可能不干净)的解决方案是将数组作为静态变量(或应用程序类的一部分,或单例),并在两个活动中使用实际数组。
如果您可以设计两个列表都在两个片段中,并且是一个活动的一部分,那么只需让活动保留两个片段的共享数组即可

public class myOrderAdapter extends ArrayAdapter<myProduct> {

    public class ViewHolder{
        Button minusItem;
    }

    public myOrderAdapter(Context context, ArrayList<myProduct> orders){
        super(context, 0, orders);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final myProduct order = getItem(position);

        viewHolder.minusItem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                order.productQuantity --;
                if(order.productQuantity() <= 0){
                    order.productQuantity = 0;
                    notifyDataSetChanged();
                }
                Toast.makeText(getContext(),"" + order.productQuantity(),Toast.LENGTH_SHORT).show();

        return convertView;
    }
}
public class myProduct implements Parcelable {

    @SerializedName("productID")
    public int productID;
    @SerializedName("categoryID")
    public int categoryID;
    @SerializedName("productName")
    public String productName;
    @SerializedName("productPrice")
    public int productPrice;

    public int productQuantity = 0;

    public myProduct(int productID, int categoryID, String productName, int productPrice){
        this.productID = productID;
        this.categoryID = categoryID;
        this.productName = productName;
        this.productPrice = productPrice;
    }

    public int getProductID(){
        return productID;
    }

    public int getCategoryID(){
        return categoryID;
    }

    public String getProductName(){
        return productName;
    }

    public int getProductPrice(){
        return productPrice;
    }

    public int productQuantity() {
        return productQuantity;
    }


    protected myProduct(Parcel in) {
        productID = in.readInt();
        categoryID = in.readInt();
        productName = in.readString();
        productPrice = in.readInt();
        productQuantity = in.readInt();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(productID);
        dest.writeInt(categoryID);
        dest.writeString(productName);
        dest.writeInt(productPrice);
        dest.writeInt(productQuantity);
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<myProduct> CREATOR = new Parcelable.Creator<myProduct>() {
        @Override
        public myProduct createFromParcel(Parcel in) {
            return new myProduct(in);
        }

        @Override
        public myProduct[] newArray(int size) {
            return new myProduct[size];
        }
    };

}
    viewOrder = (Button)findViewById(R.id.viewOrder);
    viewOrder.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(Menu.this, Order.class);
            Bundle bundle = new Bundle();
            bundle.putParcelableArrayList("productList", productList);
            i.putExtras(bundle);
            startActivity(i);

        }
    });
Bundle bundle = getIntent().getExtras();

productList = bundle.getParcelableArrayList("productList");
filter = new ArrayList<myProduct>();
orderAdapter = new myOrderAdapter(getApplicationContext(),filter);

for(myProduct item : productList){

    if(item.productQuantity > 0){
        Log.d(TAG,item.getProductName());
        Log.d(TAG,"" + item.productQuantity());
        filter.add(item);
    }
    else if(item.productQuantity <= 0){
        filter.remove(item);
    }
}
orderListView.setAdapter(orderAdapter);