2017-08-07 12 views
0

FragmentBundle以上の値を取得するには問題があります。フラグメント内の複数のバンドルを取得する方法

私のコードでは、アクティビティからデータを渡しますが、フラグメント内にバリューデータを取得しません。

活動:

Bundle bundle = new Bundle(); 
bundle.putIntegerArrayList("oki", hm); 
bundle.putIntegerArrayList("okiquantitapizze", hm_quantitàpizze); 

System.out.println("PERO:" + bundle); 

MyListFragment myFragment = new MyListFragment(); 
myFragment.setArguments(bundle); 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.replace(R.id.a, myFragment); 
transaction.commit(); 

FRAGMENT:

try { 
    bundle = getArguments(); 

    System.out.println("BUNDLES1:" + bundle); 
    if (bundle != null) { 
     strtext = bundle.getIntegerArrayList("oki"); 
     quantitàpizze=bundle2.getIntegerArrayList("okiquantitapizze"); 

     System.out.println("CAZZ:" + strtext); 

     System.out.println("PRESO:" + quantitàpizze); 
    } 
} catch(Exception e){ 

} 
+4

'bundle2'とは何ですか? – nikis

+0

引数を取得しようとしているフラグメントの方法は? – artemiygreg

+0

@nikisはい、bundle2が問題でした.... – androidiano

答えて

0

複数のバンドルを渡す方法についての質問は最初に二Bundleを置くことです。これを行うには、Bundle#putAllメソッドを使用できます。

指定したバンドルのすべてのマッピングをこのバンドルに挿入します。

Bundle bundle = new Bundle(); 
Bundle bundle2 = new Bundle(); 
bundle.putAll(bundle2); // empty fields, but that's how it works 

これで、Fragmentのすべてのフィールドにアクセスできます。あなたのケースでは、この

strtext = bundle.getIntegerArrayList("oki"); 
quantitàpizze=bundle.getIntegerArrayList("okiquantitapizze"); // removed bundle2 

ようになりputAllためdocsを参照してください。

+0

'' 'Bundle#getBundle'''を使わないのはなぜだろうか?それ以外の場合は、バンドル自体の代わりに、バンドル内の個々のオブジェクトを処理する必要があります。 –

+0

@SaikCaskey 'putBundle'を使うと、値を取得するためにFragment内にもう1つ呼び出すことになります。アクティビティの間はより良い方法ですが、フラグメントの場合は通常、親アクティビティにナビゲーション処理をさせたいからです。 –

+0

しかし、単純にputAllを使うことで、より多くの変数を管理する必要があります。個人的には、バンドル構造を使用することを好むでしょうし、bundle#keySetをforeachしてから、各値をvar。明らかにそれは完全にどちらかの方法で有効です、私はちょうど興味があった –

0

これはまさに問題への答えはありませんが、あなたはonCreateView()であなたのフラグメントに

public static MyListFragment newInstance(ArrayList<Integer> hm,ArrayList<Integer> hm_quantitàpizze) { 

     Bundle bundle= new Bundle(); 
     bundle.putIntegerArrayList("oki", hm); 
     bundle.putIntegerArrayList("okiquantitapizze", hm_quantitàpizze); 
     MyListFragment fragment = new MyListFragment(); 
     fragment.setArguments(bundle); 
     return fragment; 
    } 

のnewInstanceメソッドを使用して、バンドルを取得することができますフラグメント

の引数を設定するために、このアプローチを使用することができますが、あなたのフラグメント

MyListFragment myListFragment = MyListFragment.newInstance(hm,hm_quantitàpizze); 
    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.frag_container,myListFragment).commit(); 
次のように活動のフラグメントトランザクションを作ります
関連する問題