Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 在意图中传递了ArrayList,但未进行任何更改?_Java_Android_Arraylist - Fatal编程技术网

Java 在意图中传递了ArrayList,但未进行任何更改?

Java 在意图中传递了ArrayList,但未进行任何更改?,java,android,arraylist,Java,Android,Arraylist,抱歉,如果这是一个非常明显的问题。简而言之,我正在将一个arraylist从我的TshirtParadeActivity传递到ShopActivity。在ShopActivity中,我将arraylist传递给Adapter类,该类为复选框创建侦听器,以便在选中时修改arraylist 我可以在ShopActivity的onDestroy()方法中看到对原始arraylist所做的更改。但是,一旦该活动结束,我返回到tshirtpaRadiaeActivity我又有了一个空列表,即使我之前在Sh

抱歉,如果这是一个非常明显的问题。简而言之,我正在将一个arraylist从我的
TshirtParadeActivity
传递到
ShopActivity
。在
ShopActivity
中,我将arraylist传递给
Adapter
类,该类为复选框创建侦听器,以便在选中时修改arraylist

我可以在
ShopActivity
的onDestroy()方法中看到对原始arraylist所做的更改。但是,一旦该活动结束,我返回到
tshirtpaRadiaeActivity
我又有了一个空列表,即使我之前在
ShopActivity
中添加了它

如何在活动之间保持对arraylist的更改?我将代码包括在下面:

tshirtpaRadiaActivity.java

package com.bignerdranch.android.tshirtparadise;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;
import java.util.List;

public class TshirtParadiseActivity extends AppCompatActivity {

    private Button mSexy0;
    private Button mCheckOut;
    private int POOR=0;
    private ArrayList<Tshirt> shoppingCart = new ArrayList<Tshirt>();
    private static final int requestCodeShop=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tshirt_paradise);
        mSexy0 = (Button) findViewById(R.id.sexy0);
        mCheckOut = (Button) findViewById(R.id.checkout);

        mCheckOut.setOnClickListener(new View.OnClickListener(){
           @Override
           public void onClick(View v){
               //ARRAYLIST IS EMPTY
               for (int i=0;i<shoppingCart.size();i++){
                   System.out.println("you bought a " + shoppingCart.get(i).getTitle() +
                           " for $" + shoppingCart.get(i).getPrice());
               }
           }
        });

        mSexy0.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                Intent i = ShopActivity.newIntent(TshirtParadiseActivity.this,0,shoppingCart);
                startActivity(i);
            }
        });
    }    
}
public class ShopActivity extends AppCompatActivity {

    private RecyclerView shirtRecyclerView;
//    private ShirtAdapter shirtAdapter;
    private int mQuality;
    TshirtAdapter teeAdapter;
    private List<Tshirt> teeShirtList;
    private static ArrayList<Tshirt>shoppingCart;
    private static final String QUALITY = "com.bignerdranch.android.tshirtparadise.muchquality";
    private static String CART = "com.bignerdranch.android.tshirtparadise.cart";
    private static final String BUY = "com.bignerdranch.android.tshirtparadise.buy";

    public static Intent newIntent(Context context, int quality,ArrayList<Tshirt>shoppingCart){
        //creates an instance of ShopActivity class
        Intent i = new Intent(context,ShopActivity.class);
        i.putExtra(QUALITY,quality);
        i.putExtra(CART,(Serializable)shoppingCart);
        return i;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //Activities are presented to the user
        setContentView(R.layout.activity_shop);
        TShirtCabinet cabinet = new TShirtCabinet();
        Bundle bundle = getIntent().getExtras();
        mQuality = bundle.getInt(QUALITY);
        //to transform serializable to arraylist, use getSerializable(String name)
        shoppingCart = (ArrayList<Tshirt>) bundle.getSerializable(CART);

        teeShirtList = cabinet.getList(mQuality);
        shirtRecyclerView = (RecyclerView)findViewById(R.id.tshirt_list);
        shirtRecyclerView.setLayoutManager(new LinearLayoutManager(ShopActivity.this));
        teeAdapter = new TshirtAdapter(teeShirtList,shoppingCart);
        shirtRecyclerView.setAdapter(teeAdapter);
    }
}
package com.bignerdranch.android.tshirtparisie;
导入android.content.Intent;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入java.util.ArrayList;
导入java.util.List;
公共类TshirtParadeActivity扩展了AppCompativity{
专用按钮mSexy0;
专用按钮mCheckOut;
私人智力差=0;
private ArrayList shoppingCart=新ArrayList();
私有静态最终int requestCodeShop=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u tshirt\u paradise);
mSexy0=(按钮)findViewById(R.id.sexy0);
mCheckOut=(按钮)findviewbyd(R.id.checkout);
mCheckOut.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//ARRAYLIST为空

对于(int i=0;i当您将一个对象放入一个
意图中,并将其发送到另一个
活动中时,在大多数情况下,您将在新的
活动中得到该对象的不同实例。该列表中可能包含所有相同的值,但就程序而言,它是一个不同的列表


如果要查看第一个活动中反映的对第二个活动所做的更改,应使用活动“结果”。在第一个活动中,通过调用
startActivityForResult()
而不是
startActivity()
,来启动第二个活动。在第二个活动中,在调用
finish之前调用
setResult()
()
。然后,回到第一个活动中,通过实现onActivityResult()来处理该结果
,并在那里更新您的列表。

当您将一个对象放入一个
意图中,并将其发送到另一个
活动中时,在大多数情况下,您将在新的
活动中得到该对象的不同实例。该列表中可能包含所有相同的值,但就e程序是相关的


如果要查看第一个活动中反映的对第二个活动所做的更改,应使用活动“结果”。在第一个活动中,通过调用
startActivityForResult()
而不是
startActivity()
,来启动第二个活动。在第二个活动中,在调用
finish之前调用
setResult()
()
。然后,回到第一个活动中,通过实现onActivityResult()来处理该结果
,并在那里更新您的列表。

谢谢,您知道为什么它是新活动中对象的另一个实例吗?@st4rgut,您需要研究core android arch来解决这个问题。当您使用
可序列化
接口传输对象时,它会复制对象(新实例)。因此
i.putExtra(CART,(可序列化)购物车);
将发送制作
shoppingCart
副本所需的数据,但它不会引用原始实例。谢谢,你知道为什么它是新活动中对象的另一个实例吗?@st4rgut,你需要研究core android arch来解决这个问题。当你使用
可序列化的
传输对象时>接口,它将复制对象(新实例)。因此,
i.putExtra(购物车,(可序列化)shoppingCart);
将发送复制
shoppingCart
所需的数据,但它不会引用原始实例。
public class TshirtAdapter extends RecyclerView.Adapter<TshirtAdapter.ShirtHolder>{
private String TAG = "TshirtAdapter";
private List<Tshirt> teeList;
private Context mContext;
private static ArrayList<Tshirt> shoppingCart;

public TshirtAdapter(List<Tshirt> teeShirts,ArrayList<Tshirt>cart){
    teeList = teeShirts;
    shoppingCart = cart;
}
@Override
public TshirtAdapter.ShirtHolder onCreateViewHolder(ViewGroup parent, int viewType){
    mContext = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(mContext);
    View viewHolder = inflater.inflate(R.layout.list_item_tshirt,parent,false);
    return new ShirtHolder(viewHolder);
}
public class ShirtHolder extends RecyclerView.ViewHolder{
    //render the view, don't add data yet
    private TextView title;
    private CheckBox bought;
    private ImageView preview;
    private TextView price;
    public ShirtHolder(View itemView){
        super(itemView);
        title = itemView.findViewById(R.id.tshirt_title);
        bought = itemView.findViewById(R.id.tshirt_checkbox);
        preview = itemView.findViewById(R.id.tshirt_picture);
        price = itemView.findViewById(R.id.tshirt_price);
    }

    public void bindShirt(final Tshirt tee){
        title.setText(tee.getTitle());
        price.setText(tee.getPrice());
        bought.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton btn,boolean isChecked){
                if (btn.isChecked()){
                    shoppingCart.add(tee);
                    Log.d(TAG,"adding tee " + tee);
                }
                else {
                    shoppingCart.remove(tee);
                    Log.d(TAG,"removing tee " + tee);
                }
            }
        });
        if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.LOLLIPOP){
            preview.setImageDrawable(mContext.getApplicationContext().getDrawable(R.drawable.blue));
        }
        else {
            preview.setImageDrawable(mContext.getResources().getDrawable(R.drawable.blue));
        }
    }
}
@Override
public void onBindViewHolder(ShirtHolder shirtHolder, int position){
    Tshirt t = teeList.get(position);
    shirtHolder.bindShirt(t);
}
@Override
public int getItemCount(){
    return teeList.size();
}

public ArrayList<Tshirt>getShoppingCart(){
    return shoppingCart;
}