2016-12-25 10 views
-3

私は、データを渡してMainActivityに送信する複数のアクティビティを持つAndroidアプリを作成します。私はデータを渡すインテントを作成し、それを使ってsaveInstanceStateを使用して保存する必要があります。 InformationAを渡すと正常に動作しますが、データInfomationBに別のインテントInfoAを保存して送信すると、その情報は消去されます。 私は共有の設定を使ってみました。アクティビティを介してデータを送信して保存する方法。

どのように私はそれを修正することができますし、なぜ情報Aの消去ですか?

public class MainActivity extends AppCompatActivity { 

String order = "Order \n"; 
String Order1; 
String Order2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    TextView warzywa = (TextView) findViewById(R.id.warzywa); 
    warzywa.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick (View View){ 
      Intent idź_w = new Intent(MainActivity.this, vegetables_activity.class); 
      startActivity(idź_w); 
     } 
    }); 
    TextView owoced = (TextView) findViewById(owoce); 
    owoced.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick (View View){ 
      Intent idź_w = new Intent(MainActivity.this, Owoce.class); 
      startActivity(idź_w); 
     } 
    }); 

    Button wysyłka = (Button) findViewById(R.id.zamówienie_całkowite); 

    wysyłka.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick (View View){ 
       if (Order1==null && getIntent().getExtras().getString("WhatO")!=null) 
       Order1 = getIntent().getExtras().getString("WhatO"); 
       if (Order2==null && getIntent().getExtras().getString("WhatV")!=null) 
       Order2 = getIntent().getExtras().getString("WhatV");  
       order = order + Order1 + Order2; 
       Toast.makeText(MainActivity.this, "" + order , Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putString("Order1", Order1); 
    savedInstanceState.putString("Order2", Order2); 
    super.onSaveInstanceState(savedInstanceState); 
} 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    Order1 = savedInstanceState.getString("Order1"); 
    Order2 = savedInstanceState.getString("Order2"); 
}} 

1子アクティビティ

public class vegetables_activity extends AppCompatActivity { 
String Order = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_warzywa); 
    final ArrayList<Produkt> vegetables = new ArrayList<>(); 
    vegetables.add(new Produkt("tomatoe", 0)); 
    vegetables.add(new Produkt("onion", 0)); 
    vegetables.add(new Produkt("potatoe", 0)); 

    New_Adapter adapter = new New_Adapter(this, vegetables); 

    ListView listView = (ListView) findViewById(R.id.activity_vegetables); 
    listView.setAdapter(adapter); 

    Button order = (Button) findViewById(R.id.zamówienie_warzywne); 
    order.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View View) { 
      for (int z = 0; z < vegetables.size(); z++) { 
       if (vegetables.get(z).getMquantity() != 0) { 
        Order = "" + Order + vegetables.get(z).getmNazwa_Warzywa() + " razy " + vegetables.get(z).getMquantity() + "\n"; 
       } 
      } 
      Context context = getApplicationContext(); 
      Toast.makeText(context, "OK", Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(vegetables_activity.this, MainActivity.class); 
      intent.putExtra("WhatV", Order); 
      startActivity(intent); 
     } 
    }); 
}} 

2子アクティビティ

public class Owoce extends AppCompatActivity { 
String Order_Owoce = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_warzywa); 
    final ArrayList<Produkt> vegetables = new ArrayList<>(); 
    vegetables.add(new Produkt("apple", 0)); 
    vegetables.add(new Produkt("banana", 0)); 
    vegetables.add(new Produkt("peach", 0)); 

    New_Adapter adapter = new New_Adapter(this, vegetables); 

    ListView listView = (ListView) findViewById(R.id.activity_vegetables); 
    listView.setAdapter(adapter); 

    Button order = (Button) findViewById(R.id.zamówienie_warzywne); 
    order.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View View) { 
      for (int z = 0; z < vegetables.size(); z++) { 
       if (vegetables.get(z).getMquantity() != 0) { 
        Order_Owoce = "" + Order_Owoce + vegetables.get(z).getmNazwa_Warzywa() + " razy " + vegetables.get(z).getMquantity() + "\n"; 
       } 
      } 
      Context context = getApplicationContext(); 
      Toast.makeText(context, "OK", Toast.LENGTH_SHORT).show(); 
      Intent intent = new Intent(Owoce.this, MainActivity.class); 
      intent.putExtra("WhatO", Order_Owoce); 
      startActivity(intent); 
      } 
    }); 
} 
} 
+1

関連するコードを表示してください。 –

+0

データを '' Bundle''と同じキーで保存していますか?これにより元のデータが上書きされます。さらなる洞察のためにポストコードを行います。 – AshMenhennett

+0

関連するコードを追加 – Maciek

答えて

0

私はあなたが、配列を試す可能性があるとします。関連情報の各部分を配列の特定の場所(意図を含むアクティビティ間で転送する必要があります)に配置し、受信アクティビティがどこにアクセスするかを知るためにインテントとともにその情報のインデックスを送信します。

0

あなたの意図を宣言したときに、アクティビティから別のアクティビティへのバンドルで引数を渡すことができます。

例を参照してください:

Intent intent = new Intent(this, AnotherActivity.class); 
intent.putExtra("argKey", argValue); 

しかし、私は間違っていない場合はバンドルのみ、1メガバイトまで保存できることに注意してください、あなたは例えば巨大な配列を渡す必要があるときに、などのさまざまなアプローチを試してみてくださいSharedPreferencesまたは保存するデータをDataManagerシングルトンクラスに保存し、必要に応じて取得します。

+0

私はそれをやってみましたが、私が2回目の意図を渡すと、savedInstanceStateで保存した情報が消えてしまうようです – Maciek

関連する問題