【问题标题】:How to get the arraylist out android studio如何从android studio中取出arraylist
【发布时间】:2017-11-21 13:46:47
【问题描述】:

当我的ArrayList 在不同的页面上时,我无法将其取出。我想从 Android Studio 中获取 ArrayList

这是CartActivity类:

public class CartActivity extends AppCompatActivity {
    private ArrayList<CartItem> cartList;
    ListView listView;

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

        listView = (ListView) findViewById(R.id.listView);
        CartAdapter adapter = null;
        cartList = new ArrayList<>();
        adapter = new CartAdapter(this, R.layout.adapter_cart_item, cartList);
        listView.setAdapter(adapter);
    }
}

这是ProductActivity 类。这是数据被存储到ArrayList的地方:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_product);
    myDB = new DatabaseHelper(ProductActivity.this);
    textViewPrice = (TextView) findViewById(R.id.textViewPrice);
    textViewInfo = (TextView) findViewById(R.id.textViewInfo);
    textViewName = (TextView) findViewById(R.id.textViewName);
    ivProduct = (ImageView) findViewById(R.id.ivProduct);
    btnAddToCart = (Button) findViewById(R.id.btnAddToCart);
    spinnerQuantity = (Spinner) findViewById(R.id.spinnerQuantity);


    Intent in = getIntent();
    Bundle b = in.getExtras();
    userID = b.getString("userID");
    productID = b.getInt("productID");
    Cursor results = myDB.checkProduct();
    if (results.getCount() == 0) {
        Toast.makeText(getApplicationContext(), "Error: no data found!",
                Toast.LENGTH_SHORT).show();
        return;
    } else {
        StringBuffer buffer = new StringBuffer();
        while (results.moveToNext()) {
            id = results.getInt(0);
            name = results.getString(1);
            price = results.getString(2);
            info = results.getString(4);
            quantity = Integer.parseInt(results.getString(5));
            image = results.getBlob(6);
            if (id == productID) {
                textViewName.setText(name);
                textViewInfo.setText(info);
                textViewPrice.setText("S$" + price);

                int[] quantityValues = new int[quantity + 1];
                int counter = 0;
                for (int i = 0; i < quantityValues.length; i++) {
                    quantityValues[i] = counter;
                    counter++;
                    quantityList.add(Integer.toString(quantityValues[i]));

                }
                Bitmap bitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
                ivProduct.setImageBitmap(bitmap);


                ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, quantityList);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                spinnerQuantity.setAdapter(adapter);
            }
        }
    }
}

public void addCart(View v) {
    cartList.add(new CartItem(name, price,spinnerQuantity.getSelectedItem().toString(), image, id));

    Intent productListIntent = new Intent(this, CartActivity.class);
    startActivity(productListIntent);

}

【问题讨论】:

  • 一般来说,您为什么期望一个活动中的变量可以从另一个活动中访问?
  • 您应该将数组列表从 Activity A 传递到 B,之后您可以向其中添加新项目,请参阅此参考:stackoverflow.com/a/21250407/4146722
  • 一个活动中的变量不能从另一个活动中访问吗?
  • 感谢您的所有帮助。

标签: java android arraylist


【解决方案1】:

您应该在 CartItem 类中实现 Serializable ,然后从 ProductActivity 传递给 CartActivity 。像这样:

ProductActivity 类。

Intent productListIntent= new Intent(this, CartActivity .class);
  productListIntent.putExtra("cartlist", ArrayList<CartItem>mcartItem);
startActivity(productListIntent);

CartActivity 类中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cart);
      ArrayList<CartItem> mycart= new ArrayList<CartItem>();
          mycart= (ArrayList<CartItem>)getIntent().getSerializableExtra("cartlist");
     listView = (ListView) findViewById(R.id.listView);
        CartAdapter adapter = null;
        adapter = new CartAdapter(this, R.layout.adapter_cart_item, mycart);
        listView.setAdapter(adapter);
    }

【讨论】:

  • 你在 CartItem 类中实现了 Serializable 吗?
  • 我刚试过但是有系统错误 productListIntent.putExtra("cartlist", ArrayListmcartItem);
  • 我刚刚在 CartItem 类中实现了 Serializable。
  • 你可以试试 "productListIntent.putExtra("cartlist", cartList);"这个。
  • 感谢您在我尝试 productListIntent.putExtra("cartlist", cartList); 后的所有帮助它不再有任何系统错误,但它仍然没有工作。但在我运行更新后,它突然就起作用了。
【解决方案2】:

这不是最佳实践,但你可以制作你的 arrayList

public static ArrayList list;

然后您可以使用 {class_name}.list 从其他活动访问它

【讨论】:

  • 感谢您的帮助
【解决方案3】:

你必须通过意图传递你的数据列表(因为意图是一个消息传递对象)来自!活动到另一个活动。为此,您必须使该类 Parcable 或 Serializable 。如何在 andriod studio 中制作类 Parcable 阅读此answer。然后将 thah 类放入您传递给 startActivity() 方法的意图中,例如

intent.putParcelableArrayListExtra("key",your_list);

 intent.putExtra("key",your_class)// incase of single object

然后将其传递给第二个活动的 onCreate() 方法,例如

getIntent().getParcelableArrayListExtra("your_key")

getIntent().getParcelableExtra()//  incase of single object

希望对你有帮助

【讨论】:

  • 感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2021-11-07
  • 2017-08-25
  • 2021-01-13
  • 1970-01-01
相关资源
最近更新 更多