Я пытаюсь передать arraylist из активности SpinPizza.java в Bill.java (используя Parcelable).
Теперь проблема в том, что в получающем действии массив, который я получаю, изменяется сам по себе... то есть.он содержит только последние введенные значения во всех своих индексах ... Я не могу понять причину этого ... Я публикую соответствующий код ниже: -
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));
}}}
Пожалуйста, помогите мне.
ОБНОВЛЕНИЕ
@ Flo Я попытался сделать это через класс Application.Но сейчас я получаю исключение нулевого указателя. (Я упомянул ниже в строке, где я его получаю)
Это мой исправленный код.
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 ... Он просто отправляет класс по умолчанию .. (определено NULL) :-(