2012-11-29 11 views
10

Ich bin wirklich neu in Android und implementiere ein kleines Projekt, in dem ich Neuigkeiten von einer Drupal-Website habe. Diese App hat 3 Tabs und jeder Tab hat eine Liste von Artikeln mit spezifischem Inhalt. Die Liste der Artikel wird durch Textansichten und Bildansichten in Linearlayout erstellt. Wenn ich auf den Titel klicke, öffnet sich der Artikel mit Details. Diese Artikel werden über das HTTP POST- und ViewJSON-Modul von der Drupal-Site geladen. Registerkarten werden mit FragmentActivity und TabHost erstellt. Alles ist in Ordnung und funktioniert bis hier.So aktualisieren Sie den Inhalt eines Fragment-Tabs beim Klicken auf die Schaltfläche

Mein Problem ist, dass ich eine Aktualisierungsschaltfläche erstellen möchte, über Tabs platziert werden und wenn ich es drücke, muss die Liste der Artikel aktualisieren oder neu laden und die aktuelle Registerkarte geöffnet lassen. Ich habe versucht, den Tab-Fragment-Inhalt zu ersetzen und ihn wieder zu öffnen, aber wenn ich auf den Titel eines Artikels klicke, um ihn zu öffnen, bleibt der Tab-Inhalt unter allen Fragmenten im Stapel. Ich erwähne, dass wenn ich auf den Titel des Artikels klicke, ein neues Fragment geöffnet wird. Ich schickte eine ID der Artikel als Argument und im gleichen Fragment öffne ich den Inhalt des Artikels.

Ich habe mit diesem Code versucht, aber keinen Erfolg.

Button btn_refresh = (Button) findViewById(R.id.btn_refresh); 
     btn_refresh.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       String current_tab = mTabHost.getCurrentTabTag(); 
       if(current_tab.contains("POPULARE")){ 

        Fragment f; 
        f = new PopulareActivity(); 
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
        ft.replace(R.id.tot,f); 
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        ft.commit(); 
       } 
       if(current_tab.contains("RECOMANDATE")){ 

        Fragment f; 
        f = new RecomandateActivity(); 
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
        ft.replace(R.id.tot,f); 
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        ft.commit(); 
       } 

Genauer gesagt gebe ich auf app, drücken Tab2 (zeige die Liste der Artikel von tab2), drücken Sie Refresh-Button, öffnen Sie einen Artikel, drücken Sie die Zurück-Taste des Mobilgeräts und zeigen Sie mir den Inhalt tab2. Jetzt gebe ich Tab1 ein (und zeige die Liste der Artikel von Tab1), öffne einen Artikel aus der Liste von Tab1, zeige mir, was ich brauche, und drücke die Zurück-Taste von Mobile. In diesem Moment wird der tab2-Inhalt angezeigt (die Liste der Artikel von tab2, von wo aus ich den Refresh-Button gedrückt habe).

Zum Öffnen Details eines Artikels Ich verwende:

  tv.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 

          Fragment f; 
          f = new DetaliiActivity(); 
          Bundle data = new Bundle(); 
          data.putInt("id", nid); 
          f.setArguments(data); 
          FragmentTransaction ft = getFragmentManager().beginTransaction(); 

          ft.replace(R.id.tot,f); 

          ft.addToBackStack(null); 
          ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
          ft.commit(); 
        } 
       }); 

Vielen Dank im Voraus für die Hilfe!

Antwort

6

Um den Inhalt eines Fragments zu aktualisieren, können Sie einen Verweis auf das Fragment beibehalten und eine öffentliche Methode (z. B. refresh()) in diesem Fragment aufrufen. Beispiel:

public class ArticleTabFragmentActivity extends FragmentActivity{ 
    private PopulareFragment populareFragment; 
    private RecomandateFragment recomandateFragment; 

    <code> 

    private void bindView(){ 
    Button btn_refresh = (Button) findViewById(R.id.btn_refresh); 

    btn_refresh.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       String current_tab = mTabHost.getCurrentTabTag(); 
       if(current_tab.contains("POPULARE")){ 
        populareFragment.refresh(); 
       } else if(current_tab.contains("RECOMANDATE")){ 
        recomandateFragment.refresh(); 
       } 
    }); 
    } 



} 

public class PopulareFragment extends Fragment{ 

    public void refresh(){ 
    <refresh the contents of the fragment> 
    } 

} 

<Same for other fragment> 

Wenn Sie nun die Registerkarte Fragment erstellen, wie die PupulareFragment, verwenden Sie die pupulareFragment Instanzvariable um das Fragment zu speichern. So ist es in der Schaltfläche zum Aktualisieren onClick verfügbar.

Auf diese Weise ersetzen/erstellen Sie keine neuen Fragmente beim Aktualisieren. Es würde also wohl auch funktionieren, wenn man zu tabActivity zurückgeht, nachdem ich zu den Details der Artikelaktivitäten gegangen bin.

+3

Können Sie ein wenig über die Methode aktualisieren? Es ist unklar, wie genau das das Fragment noch auffrischen würde. – ChuckKelly

+0

Die Refresh-Methode kann Funktionen enthalten, um die Elemente/Daten usw. im Fragment zu aktualisieren. Es tut nichts wirklich mit dem Fragment selbst, aber es muss nicht neu erstellt werden, um die Daten darin zu aktualisieren. – NickL

+1

Sie können auch über ((SectionsPagerAdapter) mViewPager.getAdapter()) auf das aktuelle Fragment zugreifen.getItem (mViewPager.getCurrentItem())) – yesildal

-1
FragmentTabHost tabHost3 = (FragmentTabHost) findViewById(android.R.id.tabhost); 
String current_tab = tabHost3.getCurrentTabTag(); 
if (current_tab.equals("abc")) { 
    ClassFragment ni = (ClassFragment) getSupportFragmentManager().findFragmentByTag("abc"); 
    ni.refresh(); 
} 

Versuchen Sie dies, alles, was unter Registerkarte vorhanden ist, wird erneut ausgeführt.

Verwandte Themen