2017-03-14 26 views
1

Hallo, meine Frage ist dies. Ich habe ein Fragment in einem View Pager, das eine Schaltfläche hat, die, wenn ein Registerkartenblatt geöffnet wird, mit einem anderen Fragment geöffnet wird. Das untere Blatt enthält eine Liste von Objekten, und wenn der Benutzer ein Objekt ausgewählt hat, das ich an das erste Fragment übergeben möchte, das ich bereits erwähnt habe, besteht das Problem darin, dass dieses Fragment angehalten wurde. Wie kann ich Daten von einem Fragment zu einem anderen senden, das pausiert ist?Fragment und Fragment Kommunikation

+0

prüfen Fragment Lebenszyklus. – Piyush

+0

Was ist bis jetzt müde? – Wizard

+0

@Andrea Fragment wird angehalten, wenn sich Ihre Aktivität im Pausenzustand befindet. Sie können Schnittstelle für die Kommunikation zwischen dem Fragment –

Antwort

0

Es gibt mehrere Möglichkeiten, Daten zwischen Fragmenten zu übergeben. Wenige sind:

  1. Sie können Getter/setter der beteiligten Fragmente Klasse
  2. Sie ihre Mutter Aktivität unter Verwendung von Schnittstellen
  3. zum Aktualisieren/Übergabe von Daten zwischen den Fragmenten oder Aktivität können Sie verwenden können
  4. Daten zwischen Fragment teilen
  5. Sie können Observer Design Muster verwenden zu teilen/pass Daten zwischen Fragmenten oder Aktivitäten
  6. Sie auch Bundle verwenden können, Daten zu übergeben

Es hängt von Ihnen ab, den besten Ansatz zu wählen, der Ihren Bedürfnissen entspricht.

+0

Funktioniert dieser Ansatz auch wenn das Fragment, das ich die Informationen weitergeben möchte, in onPause() ist? Da ich das Fragment nicht wieder erstellen möchte, – Andrea

+0

@andrea, ja, wähle den besten Ansatz, der zu dir passt. – Geek

+0

Ich habe die Bundle-Option ausprobiert, arbeite aber nicht, da das Fragment, das ich weitergeben möchte, bereits erstellt wurde und getArguments() nichts mehr tut onResume() – Andrea

0

Verwendung dieses

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     System.out.print(position + "to" + tab_position); 


     Fragment fragment = null; 
     switch (position) { 
      case 0: 

       Bundle bundle = new Bundle(); 
       bundle.putString("message", "getdata"); 
       bundle.putStringArrayList("name", running_veicle); 
       bundle.putStringArrayList("loc", running_loc); 
       bundle.putStringArrayList("running_device_id", running_device_id); 
       fragment = new Vehicle_Status_fragment_running_info(); 
       fragment.setArguments(bundle); 


       break; 
      case 1: 

       Bundle bundle1 = new Bundle(); 
       bundle1.putString("message", "getdata"); 
       bundle1.putStringArrayList("name", idle_name); 
       bundle1.putStringArrayList("loc", idle_loc); 
       bundle1.putStringArrayList("idle_device_id", idle_device_id); 
       fragment = new Vehicle_Status_fragment_Idle_info(); 
       fragment.setArguments(bundle1); 

       break; 
      case 2: 

       Bundle bundle2 = new Bundle(); 
       bundle2.putString("message", "getdata"); 
       bundle2.putStringArrayList("name", stop_name); 
       bundle2.putStringArrayList("loc", stop_loc); 
       bundle2.putStringArrayList("stop_device_id", stop_device_id); 
       fragment = new Vehicle_Status_fragment_Stop_info(); 
       fragment.setArguments(bundle2); 
       break; 

      case 3: 
       Bundle bundle3 = new Bundle(); 
       bundle3.putString("message", "getdata"); 
       bundle3.putStringArrayList("name", Innactive_name); 
       bundle3.putStringArrayList("loc", Innactive_loc); 
       bundle3.putStringArrayList("innactive_device_id", Innactive_device_id); 
       fragment = new Vehicle_Status_fragment_Inactive_info(); 
       fragment.setArguments(bundle3); 
       break; 

     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     // Show 4 total pages. 
     return 4; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 

     switch (position) { 
      case 0: 
       return getString(R.string.tab_Running).toUpperCase(l); 
      case 1: 
       return getString(R.string.tab_Idle).toUpperCase(l); 
      case 2: 
       return getString(R.string.tab_Stop).toUpperCase(l); 
      case 3: 
       return getString(R.string.tab_Innactive).toUpperCase(l); 

     } 
     return null; 
    } 


} 

erhalten Daten

View view = inflater.inflate(R.layout.fragment_tab_veicle_status_list, container, false); 
    listobj = (ListView) view.findViewById(R.id.gridview); 
    String myValue = this.getArguments().getString("message"); 
+0

Funktioniert dieser Ansatz auch wenn das Fragment, das ich Willst du die Informationen weitergeben in onPause()? Weil ich das Fragment nicht noch einmal erstellen möchte – Andrea

Verwandte Themen