如何将Arraylist从第一个活动传递到第二个活动?
我想从活动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):-(
你putParcelableArrayListExtra()
方法应具有完全限定类名 - 文件说:
扩展数据添加到意图。 名称必须包含包前缀 ,例如应用程序 com.android.contacts将使用名称为“com.android.contacts.ShowAll”的名称 。
请问您的store
类(btw类名应该以大写字母开头)是否实现Parcelable?这是合同的一部分putParcelableArrayListExtra()
我很抱歉,我没有得到你。我的应用程序位于com.Lak包中,我现在应该做什么?是的...商店类实现Parcelable ... :) – 2011-04-02 16:24:55
调用putPa ..(“com.Lak.myclass”,B) – 2011-04-03 06:07:44
Thanx男人。我会试试这个:-) – 2011-04-03 10:30:46
@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