2017-10-04 2 views
0

Ich habe Klasse Produkt, die Setter-und Getter-Methoden enthalten. In ThirdActivity habe ich Array Liste von Bildern und ich möchte sie in Fragmenten abrufen.GetIntent in Fragment nicht mit mir arbeiten

ThirdActivity

AdapterView.OnItemClickListener onItemClick = new 
      AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, 
             long id) { 
        //Do any thing when user click to item 

        Intent i= new Intent(getApplicationContext(),FragmentOne.class); 
        Bundle b= new Bundle(); 

        b.putInt("Big Image",productList2.get(position).getFragment1()); 
        b.putInt("Big Image",productList2.get(position).getFragment2()); 
        b.putInt("Big Image",productList2.get(position).getFragment3()); 
        b.putInt("Big Image",productList2.get(position).getFragment4()); 

        i.putExtras(b); 
        startActivity(i); 


       } 

      }; 

FragmentOne

ImageView img2; 
Bundle b=getIntent().getExtras(); 

     int image =b.getInt("Big Image"); 
     img2.setImageResource(image); 

aber ich bekommen kann Methode getIntent() in FragmentOne nicht lösen. Ich versuche auch Bundle b=getActivity().getIntent().getExtras().getString("Big Image");, aber es funktioniert nicht.

+0

getIntent funktioniert nicht innerhalb von Fragment. Sie müssen diesen Wert von Aktivität zu Fragment übergeben –

Antwort

0

Sie können keine neuen Fragmente mit einer Absicht öffnen, die Fragmente müssen immer von einer Aktivität gehostet und bei Bedarf aufgebläht werden.

Intent ist nur neue Aktivitäten starten, deshalb aufgerufen:

startActivity() // Start a new Activity 

Deshalb ist die Absicht (mit Bündel) in Ihrem Fragment nicht empfangen wird,

Hoffe, dass es hilft,

0

Es ist besser, in Ihrer Aktivität die Absicht zu haben, Ihr Fragment zu hosten und alle Daten, die Sie fragmentieren wollen, mit der newInstance-Funktion zu übergeben. In Ihrer Tätigkeit:

Bundle b=getIntent().getExtras(); 
int image =b.getInt("Big Image"); 
img2.setImageResource(image); 
FragmentTransaction transaction = 
getSupportFragmentManager().beginTransaction(); 
transaction.replace(R.id.flContent, yourFragment.newInstance(image)).commit(); 
0

Geben Sie den Wert in newInstance Funktion des Fragments.

und in onCreate Fragment erhalten diesen Wert.

String image = getArguments().getString(IMAGE); 

und in Tätigkeit

FragmentOne.newInstance("Any string"); //this will create new instance of fragment. 
0

Zunächst einmal, auch wenn dies die FragmentOne Aktivität arbeitet nur das letzte Int würde erhalten, wie Sie die gleichen „Big Bild“ Parameter mit neuer Nummer überschrieben werden.

Versuchen Sie, eine Liste zu übergeben und sie dann in FragmentOne abzurufen. Danach können Sie eine Methode erstellen, die String-Namen an Fragmente bindet.

Hoffe, das hilft.

Verwandte Themen