我想從活動SpinPizza.java傳遞一個ArrayList到Bill.java(使用Parcelable)。如何將Arraylist從第一個活動傳遞到第二個活動?
現在的問題是,在接收活動中,我得到的arraylist是由自己修改的......即。它僅包含最後輸入的值在其所有的指標......我無法理解這背後的原因......我張貼相關的代碼如下: -
SpinPizza.java
public class SpinPizza extends Activity{
store temp= new store();
int i=0;
ArrayList<store> B = new ArrayList<store>();
Spinner s=null,s1=null;
EditText edittext=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drop);
//spinners n edittext instantiation
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER)) {
// Perform action on key press
int n=Integer.parseInt(edittext.getText().toString());
temp.setOrder(s.getSelectedItem().toString(), s1.getSelectedItem().toString(),n);
B.add(temp);
TextView objText=(TextView) findViewById(R.id.pl);
TextView objText1=(TextView) findViewById(R.id.pl2);
objText.setText(B.get(i).getPizzaName());
objText1.setText(temp.getPizzaSize());
i++;
Toast.makeText(SpinPizza.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
Button next1 = (Button) findViewById(R.id.bill);
next1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), Bill.class);
myIntent.putParcelableArrayListExtra("myclass",B);
startActivityForResult(myIntent, 0);
}
});
}
}
( Bill.java)
public class Bill extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.calc);
ArrayList<store> B1 = new ArrayList<store>();
store temp1=null;
Intent ii= getIntent();
B1=ii.getParcelableArrayListExtra("myclass");
TableLayout tl = (TableLayout)findViewById(R.id.myTable);
for(int i=0;i<B1.size();i++)
{
temp1=new store();
TableRow tr = new TableRow(this);
tr.setId(100+i);
temp1=B1.get(i);
tr.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
TextView b = new TextView(this);
b.setText(temp1.getPizzaName());
b.setId(200+i);
TextView b1 = new TextView(this);
b1.setText(temp1.getPizzaSize());
b1.setId(300+i);
TextView b2 = new TextView(this);
b2.setText(String.valueOf(temp1.getQuantity()));
b2.setId(400+i);
b.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tr.addView(b);
b1.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tr.addView(b1);
b2.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tr.addView(b2);
/* Add row to TableLayout. */
tl.addView(tr,new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
}}}
請幫幫我。
UPDATE
@Flo我試圖通過應用class..But這樣做,現在我m到處空指針異常。
這是(我已經在我得到它的線下自提)我修改過的代碼。
SpinPizza.java - >沒有改變...
MyApp.java:
package com.Lak;
import java.util.ArrayList;
import android.app.Application;
public class MyApp extends Application {
ArrayList<store> B = null;
public ArrayList<store> getState(){
return B;
}
}
Bill.java
public class Bill extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.calc);
ArrayList<store> B = new ArrayList<store>();
store temp1=null;
MyApp appState = ((MyApp)getApplicationContext());
B = appState.getState();
TableLayout tl = (TableLayout)findViewById(R.id.myTable);
/* Create a new row to be added. */
/* Create TEXTVIEWS to be the row-content. */
for(int i=0;i<B.size();i++) //NULL POINTER EXCEPTION
{
temp1=new store();
TableRow tr = new TableRow(this);
tr.setId(100+i);
temp1=B.get(i);
tr.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
TextView b = new TextView(this);
b.setText(temp1.getPizzaName());
b.setId(200+i);
TextView b1 = new TextView(this);
b1.setText(temp1.getPizzaSize());
b1.setId(300+i);
TextView b2 = new TextView(this);
b2.setText(String.valueOf(temp1.getQuantity()));
b2.setId(400+i);
b.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tr.addView(b);
b1.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
tr.addView(b1);
b2.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tr.addView(b2);
/* Add row to TableLayout. */
tl.addView(tr,new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
}}}
我想申請班級不發送更新的Arraylist ...它只是發送de (定義爲NULL):-(
@Flo:怎麼做?你能舉個例子嗎? – 2011-04-02 16:23:21
創建一個擴展類Application的類。然後,您必須在您的清單文件中將這個類作爲應用程序類註冊。不,您可以在您的活動中調用getApplication(),並且您將始終獲得您實施的應用程序類的相同實例。在這堂課裏你可以做任何你喜歡的事。例如。存儲你的ArrayList,稍後從其他活動中檢索它。 – Flo 2011-04-02 17:45:03
@Flo:好的。所以我想我能做的就是創建這個應用程序類作爲SpinPizza的子類。然後將數組列表存儲在應用程序類中...然後通過getter和setter方法,檢索Bill.java中的數組列表....我希望我得到它..如果我錯了,請糾正我。 – 2011-04-03 05:12:19