2016-04-25 9 views
0

Ich entwickle eine Anwendung, in der die Fragmente dynamisch generiert werden.Abrufen der Werte aus den verschiedenen Fragmenten aus ViewPager

private void setupViewPager(ViewPager viewPager) { 
    adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    for (int i = 0; i < sequence_no.size(); i++) 
    { 
     adapter.addFragment(FragmentTwo.newInstance(i,(i+1))); 
    } 
    viewPager.setAdapter(adapter); 
} 

Nun angenommen, es wurden drei Fragmente generiert. Die generierten Fragmente haben verschiedene Widgets wie Edittext, Spinner usw. was ich mache, da ich ein Flag habe, das mir mitteilt, welches angezeigt werden soll (Spinner oder Edittext).

Ich habe eine Schaltfläche in Aktivität, auf deren Klick ich die Werte von allen Fragmenten bu bekommen muss, wie ich nur den Wert vom ersten Fragment bekomme.

Ich gebe hier eine falsche Probe, da ich weiß, dass es falsch ist, aber ich behalte es für Referenzzwecke.

Unten ist der Code auf Submit Button klicken, wo Werte eine Array-Liste ist.

if (FragmentTwo.ed_complain != null) 
    { 
     values.add(FragmentTwo.ed_complain.getText().toString()); 
    } 
    if (FragmentTwo.cb_complain != null) 
    { 
     values.add(FragmentTwo.cb_complain.getText().toString()); 
    } 
    if (FragmentTwo.spinner_complain != null && FragmentTwo.spinner_complain.getSelectedItem() != null) 
    { 
     values.add(FragmentTwo.spinner_complain.getSelectedItem().toString()); 
    } 

Bitte schlagen Sie mir vor, was ich tun muss, um alle Werte aus allen Fragmenten zu holen.

Antwort

3

Sie dieses Problem auf diese Weise mit Hilfe lösen kann. Erstellen Sie eine und implementieren Sie es in jedem Fragment. Mit dieser können Sie Wert von bestimmten Fragment erhalten.

Zum Beispiel erstellen Sie eine Interface

public interface IGetValue{ 
String getEditTextValue(); 
} 

Wenn nun jedes Fragment diese Schnittstelle implementiert dann jedes Fragment haben diese getEditTextValue() Methode implementiert und Sie können EditText Wert dieser implementiertes Verfahren zurückzukehren. nur verwenden:

@Override 
public String getEditTextValue() { 

    return YOUR_EDIT_TEXT.getText().toString(); 
} 

Nun, wenn Sie EditText Wert von Fragment1 in Ihrer Aktivität erhalten möchten, nutzen Sie einfach die Codezeile:

String valueFromFragment1= fragment1Instance.getEditTextValue(); 

Für mehr Informationen, überprüfen this und this Antwort.

Thanks :)

0

Verwenden Bundle

Put Variable Bundle: -

Fragment fragment = new Fragment(); 
Bundle bundle = new Bundle(); 
bundle.putString(key, value); 
fragment.setArguments(bundle); 

abrufen Variable aus Bundle: -

Bundle bundle = this.getArguments(); 
String myTxt = bundle.getInt(key, defaultValue); 
+0

Da ich ein einzelnes Fragment habe, d. H. Fragment2 Ich erstelle nur seine Instanzen. Nun nehme an, dass Instanz 1 einen Spinner hat, ich einen Wert ausgewählt habe und ich zu einer anderen Instanz gewechselt habe, die editierte Texte hat, wo ich Hallo eingegeben habe. Wenn Sie jetzt auf eine Senden-Schaltfläche drücken (in Aktivität definiert), sollten Sie sowohl den Spinner- als auch den Edittext-Wert anzeigen. –

+0

Abrufen des Bündelwerts aus der Aktivität –

0

In Ihrem Code, wo Sie hinzufügen Fragment zu Adapter, speichern Sie das Fragment in einer ArrayList

ArrayList<Fragment> allMyFrags=new ArrayList<Fragment>(); 
private void setupViewPager(ViewPager viewPager) { 
    adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    for (int i = 0; i < sequence_no.size(); i++) 
    { 
     Fragment mFrag=FragmentTwo.newInstance(i,(i+1)); 
     allMyFrags.add(mFrag); 
     adapter.addFragment(mFrag); 
    } 
    viewPager.setAdapter(adapter); 
} 

später in Ihrem Code, wenn Sie wollten Daten erhalten, setzen Sie das Array in einer for-Schleife und erhalten Sie Ihre gewünschten Daten

0

Danke Jungs :) Hier habe ich die Lösung teilen bin, die ich mit Hilfe der Antwort von Md. Sajedul Karim und Smartiz bekommen haben.

for(int i=0;i<allMyFrags.size();i++) 
    { 
     FragmentTwo fragment = (FragmentTwo) adapter.getItem(i);  
     Log.e("Value",fragment.getEditTextValue()); 
     values.add(fragment.getEditTextValue()); 
    } 

wo getEdittextValue() ist das Verfahren von der Schnittstelle in FragmentTwo implementiert().

Verwandte Themen