2011-04-02 97 views
0

我想从活动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):-(

回答

1

为什么不使用singleton类或Application类将列表传递给另一个活动。单例或应用程序类可以从应用程序的任何地方访问。

+0

@Flo:怎么做?你能举个例子吗? – 2011-04-02 16:23:21

+0

创建一个扩展类Application的类。然后,您必须在您的清单文件中将这个类作为应用程序类注册。不,您可以在您的活动中调用getApplication(),并且您将始终获得您实施的应用程序类的相同实例。在这堂课里你可以做任何你喜欢的事。例如。存储你的ArrayList,稍后从其他活动中检索它。 – Flo 2011-04-02 17:45:03

+0

@Flo:好的。所以我想我能做的就是创建这个应用程序类作为SpinPizza的子类。然后将数组列表存储在应用程序类中...然后通过getter和setter方法,检索Bill.java中的数组列表....我希望我得到它..如果我错了,请纠正我。 – 2011-04-03 05:12:19

2

putParcelableArrayListExtra()方法应具有完全限定类名 - 文件说:

扩展数据添加到意图。 名称必须包含包前缀 ,例如应用程序 com.android.contacts将使用名称为“com.android.contacts.ShowAll”的名称 。

请问您的store类(btw类名应该以大写字母开头)是否实现Parcelable?这是合同的一部分putParcelableArrayListExtra()

+0

我很抱歉,我没有得到你。我的应用程序位于com.Lak包中,我现在应该做什么?是的...商店类实现Parcelable ... :) – 2011-04-02 16:24:55

+0

调用putPa ..(“com.Lak.myclass”,B) – 2011-04-03 06:07:44

+0

Thanx男人。我会试试这个:-) – 2011-04-03 10:30:46

相关问题