2016-11-24 4 views
0

今のところ、2つのボタンで構成されています(後で20+で構成されます)。ボタンをクリックすると、選択できる項目のリストを持つ新しいアクティビティが表示されます。何かを選択して戻るボタンをクリックすると、アイテムの情報(この場合は「オレンジ」)を渡す新しいアクティビティが開始され、クリックされたボタンに「オレンジ」という単語が割り当てられます。Android Java - インテント間でデータを渡しますが、メインアクティビティに保存する必要があります

他のボタンをクリックして情報を割り当てると、最初のボタン情報がすべて失われます。以前の情報を保存するための私の選択肢は何ですか?私はそれを意図して作成し、それを活動の間を行き来する必要がありますか?

最後に、両方のボタンに割り当てられたすべての情報を収集し、別のアクティビティに渡す必要があります。これはカスタマイズページです。私はちょうど私はちょうどそのような文字列の情報を削除しませんアクティビティを残すように文字列を設定することができます方法はありますか?

は、ここに私のMainActivity

Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     btnValue = extras.getString("btnValue"); 
     itemValue = extras.getString("itemValue"); 
    } 

    if (btnValue.equals("btn1")){ 
     btn1.setText(itemValue); 
    } else if (btnValue.equals("btn2")) { 
     btn2.setText(itemValue); 
    } 
} 

public void onClickBtn1(View v) { 
    Intent myIntent = new Intent(this, Main2Activity.class); 
    myIntent.putExtra("btn", "btn1"); 
    startActivity(myIntent); 
} 

public void onClickBtn2(View v) { 
    Intent myIntent = new Intent(this, Main2Activity.class); 
    myIntent.putExtra("btn", "btn2"); 
    startActivity(myIntent); 
} 

と私の第二の活動だ

Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     btnValue = extras.getString("btn"); 
    } 

    listView = (ListView) findViewById(R.id.list); 
    String[] values = new String[] { "apple", "banana", "orange", "cherry"}; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); 
    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
      itemPosition = position; 
      itemPositionString = String.valueOf(itemPosition); 
     } 
    }); 
} 

public void onClickBack (View v) { 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.putExtra("btnValue", btnValue); 
    intent.putExtra("itemValue", itemValue); 
    startActivity(intent); 
} 

enter image description here

enter image description here

enter image description here

+0

とてもわかりません...... –

+0

@MehdiKhademloo申し訳ありませんが、どの部分が不明でしたか?メインページに戻り、別のボタンをクリックしてテキストを割り当てたら、すべての情報を失うだけです – Pam

答えて

1

Androidのライフサイクルを使用して、アクティビティの状態を管理できます。 アクティビティの状態を保存するには、onSaveInstanceStateメソッドで作業する必要があります。

onSaveInstanceState(Bundle bundle) 

は復元では、あなたはあなたがここで詳細を見つけることができますバンドルに、以下の方法

onRestoreInstanceState(Bundle bundle) 
onCreate(Bundle bundle) 

を確認し、次のいずれかあなたはstartActivityを使用する場合、それは新しいアクティビティを作成し https://developer.android.com/training/basics/activity-lifecycle/recreating.html

0

。あなたは古い情報を失う。第二の活動を開始し、第二の活動からあなたがsetResult

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(RESULT_OK, returnIntent); 
finish(); 

を使用する必要がありますそして、あなたはここで

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
.. 
.. 
} 

とMainActivityで結果を処理しながら、あなたはMainActivityからstartActivityForResultを使用する必要があり、たとえばHow to manage `startActivityForResult` on Android?

あり
0

基本的に3つの選択肢があります。

  1. Intentのすべてのデータを渡して、の新しい/変更されたデータをstartActivityForResult()を使用して返します。
  2. データをstatic変数(グローバル)に保存します。すべてのアクティビティは現在のデータを参照し、変更を加えて他のすべてのアクティビティに表示させることができます。これは、すばやく簡単な解決策であり、小さくて簡単な解決策に適しています。
  3. データを永続ストレージ(ファイルまたはSQLiteデータベース)に保存します。すべてのアクティビティは、現在のすべてのデータを読み取り、表示したり、変更したりすることができます。 BACKボタンを押すと、下にあるActivityは永続ストレージから現在のデータを読み込み、ビューを更新する必要があります。
関連する問題