2016-07-05 5 views
1

I a ViewPager verwenden 3 erstellen Fragments auf Activity_1, ist dies die ViewPagerAdapter:android Reset/Neuladen Fragmentdaten

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

    public ViewPagerAdapter(FragmentManager fm, int NumOfTabs) { 
     super(fm); 
     this.mNumOfTabs = NumOfTabs; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       Fragment1 tab1 = new Fragment1(); 
       return tab1; 
      case 1: 
       Fragment2 tab2 = new Fragment2(); 
       return tab2; 
      case 2: 
       Fragment3 tab3 = new Fragment3(); 
       return tab3; 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return mNumOfTabs; 
    } 
} 

Diese Activity_1, der alle Fragments hält, und zeigt automatisch Fragment_1 wenn Activity_1 geöffnet wird:

public class Activity1 extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_1); 

    TabLayout tab_layout = (TabLayout) findViewById(R.id.tab_layout); 
    tab_layout.addTab(tab_layout.newTab().setText("Frag1")); 
    tab_layout.addTab(tab_layout.newTab().setText("Frag2")); 
    tab_layout.addTab(tab_layout.newTab().setText("Frag3")); 

    final ViewPager view_pager = (ViewPager) findViewById(R.id.viewpager); 

    final ViewPagerAdapter adapter = new ViewPagerAdapter 
      (getSupportFragmentManager(), tab_layout.getTabCount()); 

    view_pager.setAdapter(adapter); 

    view_pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tab_layout)); 

    tab_layout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 

     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      view_pager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
     } 
    }); 

} 

Alle Fragment können zu Activity_2 gehen.
Fragment_3 enthält Daten, die unter Activity_2 bearbeitet werden können.

Mein Problem:

Wenn Bearbeiten von Daten aus Activity_2 und zurück zu Activity_1 der Zurück-Taste verwenden, Daten in Fragment_3 noch alt sind, nicht mit den bearbeiteten Daten von Activity_2 geändert.
Aber wenn schließen Activity_1 und öffnen Sie es erneut, Daten in Fragment_3 wird geändert.

Ich denke, ich brauche Fragment_3 zurücksetzen oder neu zu laden, wenn ich zurück zu Activity_1 von Activity_2 komme, aber ich weiß nicht wie.

Update,
dies Activity_2:

public class Activity2 extends AppCompatActivity { 

TextView tv_id; 
String id; 

TextView tv_d; 
Button bt_add, bt_remove; 

String str_find; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_2); 

    Intent i = getIntent(); 
    id = i.getStringExtra("id"); 

    tv_id = (TextView)findViewById(R.id.tv_DetailId); 

    tv_id.setText(id); 

    tv_d = (TextView)findViewById(R.id.tv_Detail); 
    bt_add = (Button)findViewById(R.id.bt_detail_add); 
    bt_remove = (Button)findViewById(R.id.bt_detail_remove); 

    str_find = "example"; 

    try { 
     final File file = new File(Environment.getExternalStorageDirectory() + "/TestFolder/Test.txt"); 

     StringBuilder text = new StringBuilder(); 
     BufferedReader br = new BufferedReader(new FileReader(file)); 
     String line; 
     while ((line = br.readLine()) != null) { 
      text.append(line); 
      text.append('\n'); 
     } 
     br.close(); 
     xml_root = text.toString(); 

     FileInputStream in = new FileInputStream(file); 
     int len = 0; 
     byte[] data1 = new byte[1024]; 
     while (-1 != (len = in.read(data1))){ 
      if(new String(data1, 0, len).contains(str_find)){ 
       bt_add.setVisibility(View.GONE); 
       tv_d.setText("yes"); 
       bt_remove.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //something to edit data on Test.txt 
        } 
       }); 
      } 
      else { 
       bt_remove.setVisibility(View.GONE); 
       tv_d.setText("no"); 
       bt_add.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //something to edit data on Test.txt 
        } 
       }); 
      } 

     } 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 

}

+0

Verwenden Schnittstellen werden zwischen Aktivität oder Fragmenten und Aktivität zu kommunizieren. –

+1

Mögliches Duplikat von .. http://stackoverflow.com/q/38143179/6334037 – user392117

+0

@Mohammed Atif: wie man es benutzt – 1234abcd

Antwort

1

in Ihrem onResume() Methode können Sie eine Bedingungsprüfung haben

view_pager.setCurrentItem(last_frag);

wo last_frag eine globale ganze Zahl, deren Wert, den Sie jedes Mal auf Seite ch setzen Ange Zuhörer.

Dies wird Ihr Fragment aktualisieren.

In Ihrem Activity1.java

machen folgende

bei der Initialisierung

private ViewPager view_pager; wird Ihre globale Variable

und entfernen final ViewPager ändert.

es wie diese machen in onCreate() Methode

view_pager = (ViewPager) findViewById(R.id.viewpager); 

private int last_frag = 0; Ihre globale Variable in Activity1.java

@Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      view_pager.setCurrentItem(tab.getPosition()); 
      last_frag = tab.getPosition(); 
     } 
+0

Ich wurde versucht, aber in view_pager.addOnPageChangeListener, kann ich nicht hinzufügen view_pager.setCurrentItem (last_frag); Code zeigt rot auf setCurrentItem. vielleicht verstehe ich dein Explantat nicht. kannst du mir etwas zeigen, das du mit meinem Code bearbeitest? – 1234abcd

+0

Ich aktualisiere die Antwort, werfen Sie einen Blick. –

+0

also, wenn ich richtig verstehe, in view_pager.setCurrentItem (last_frag); last_frag ist int von 0 bis 2 in jedem Fragment definiert, das an Activity_2 gesendet wurde und in Activity_1 erneut angezeigt wird? – 1234abcd

Verwandte Themen