2016-07-06 12 views
0

私は1つのアクティビティから別のアクティビティへのArrayListを受け取り、リストにデータを追加してから再度渡します。 事は、私がこれを行うときにクラスレベルで宣言しなければならないが、それから私の質問がある。クラスレベルでそれを宣言するときに、インテントからデータを取得するにはどうすればよいですか?クラスレベルでオブジェクトを宣言してインテントデータを取得するにはどうすればよいですか?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     Log.d(TAG, "Start onCreate Listan"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_listan); 
     Bundle listan = getIntent().getExtras(); 
     ArrayList<Produkt> lista = (ArrayList<Produkt>) getIntent().getSerializableExtra("list"); 
     if (lista.isEmpty()) { 
      Log.d(TAG, "lista==null"); 
      ListProduktAdapter adapter = new ListProduktAdapter(Listan.this, lista); 
      ListView listView = (ListView) findViewById(R.id.listView); 
      Bundle produktInfo = getIntent().getExtras(); 
      String name = produktInfo.getString("name").toString(); 
      String allergen = produktInfo.getString("allergen").toString(); 
      Produkt produkt = new Produkt(allergen, name); 
      Log.d(TAG, "gjort produkt"); 
      lista.add(produkt); 
      listView.setAdapter(adapter); 
     } 
     else { 
      ListProduktAdapter adapter = new ListProduktAdapter(Listan.this, lista); 
      ListView listView = (ListView) findViewById(R.id.listView); 
      Bundle produktInfo = getIntent().getExtras(); 
      String name = produktInfo.getString("name").toString(); 
      String allergen = produktInfo.getString("allergen").toString(); 
      Produkt produkt = new Produkt(allergen, name); 
      Log.d(TAG, "gjort produkt"); 
      lista.add(produkt); 
      listView.setAdapter(adapter); 
     } 
    } 

ここでもう一度やり直す方法です。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
    if(result != null) { 
     if(result.getContents() == null) { 
      Log.d(TAG, "Scanning Failed"); 
      Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); 
     } else { 
      Log.d(TAG, "Scannad"); 
      Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); 
      Intent i = new Intent(this, getXML.class); 
      i.putExtra("barCode", result.getContents()); 
      i.putExtra("list", lista); 
      startActivity(i); 
      Log.d(TAG, "Going to new activity"); 
     } 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

私が手にエラーが発生し、それがi.putExtra(「リスト」、リスタ)の「シンボル 『リスタ』を解決できない」ということです。解決「onActivityResult」

で :

私はmainactivityでオブジェクトを開始し、私はそれにデータを追加し始めるまで、空などの活動の流れを通過させることにより、問題を解決しました。

+0

どのようなエラーが発生しますか? –

+0

私はここで答えを確認し、それはあなたのケースで有用かもしれない[リンク](http://stackoverflow.com/questions/37878434/apart-from-intent-is-there-any-other-way-to-send -data-across-activities-in-andro/37878718#37878718)。 –

+0

@VishalPatoliyaエラーは、onActivityResultでは、i.putExtraのときに "lista"を見つけることができません。 –

答えて

0

これにはJavaインターフェイスを使用できます。しかし、複雑さの少ないアプローチを使用する場合は、次の方法を使用することもできます。

2つの別々のアクティビティファイルを宣言する代わりに、アクティビティクラスファイル内にアクティビティファイルを宣言することができます。など

このように、1つのファイルで2つのアクティビティを宣言でき、簡単に相互にデータを渡すこともできます。

とアプローチ次のマニフェストの使用に宣言する:

<activity android:name="com.example.foo.OuterActivity$InnerActivity" ></activity> 

しかし、あなたは

public static class InnerActivity{ 

} 
0

を使用して静的としてinnerClassをdecalreする必要があります、私はあなたの質問を誤解が、なぜやるなら、私を修正あなたは宣言します

`ArrayList<Produkt> lista = (ArrayList<Produkt>) getIntent().getSerializableExtra("list");` 

inside onCreate()?

変数をクラスメンバーインスタンスではなく、onCreate()メソッド内で宣言しています。

+0

事は、私がこの活動に初めて入るとき、リストはまだ存在しません。だから私はこの活動でそれを作りたいと思っています。そして、パスは以前の活動に戻り、再びこの活動に合格し、もっと多くのデータを追加します。 また、リスト内のデータを保存することができれば、アクティビティが変更されるので、前後に渡す必要はありません。 –

関連する問題