2017-06-19 46 views
-1

我不能讓我的ArrayList當它在不同的頁面上。我想從Android Studio中獲得ArrayList如何獲取陣列列表Android工作室

這是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); 

} 
+1

爲什麼你會期望從粥活動訪問一般來說,一項活動中的變量可以從另一項活動中獲得? –

+0

您應該將數組列表從活動A傳遞給B,然後您可以將新項目添加到該項目中,請參閱以下參考:https://stackoverflow.com/a/21250407/4146722 –

+0

不是一個活動中的變量可訪問從另一個活動? – KUROYUKI

回答

0

這是不是最好的做法,但你可以讓你的ArrayList

public static ArrayList list; 

然後你可以使用{CLASS_NAME} .LIST

+0

感謝您的幫助 – KUROYUKI

1

你應該impliment在CartItem類序列化,然後通過從ProductActivity到CartActivity。像這樣:

ProductActivity class。

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); 
    } 
+0

你有沒有在CartItem類中實現Serializable? –

+0

我剛剛嘗試過,但系統錯誤productListIntent.putExtra(「cartlist」,ArrayList mcartItem); – KUROYUKI

+0

我剛剛在CartItem類中實現了Serializable。 – KUROYUKI

0

你必須通過意向通過您的數據列表(如意圖是消息傳遞對象)從!活動到另一個活動。爲此,您必須創建該類Parcable或Serializable。如何在Andriod工作室製作班級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 

希望這將有助於你的

+0

感謝您的幫助 – KUROYUKI