2012-11-29 12 views
10

Sono davvero nuovo in Android e sto implementando un piccolo progetto in cui ho notizie da un sito Web Drupal. Questa app ha 3 schede e ogni scheda contiene un elenco di articoli con contenuti specifici. L'elenco degli articoli è creato da visualizzazioni di testo e immagini visualizzate in linearlayout. Quando clicco sul titolo, l'articolo si apre con i dettagli. Questi articoli vengono caricati dal sito Drupal tramite il modulo HTTP POST e ViewJSON. Le schede vengono create con FragmentActivity e TabHost. Va tutto bene e funziona bene fino a qui.Come aggiornare il contenuto della scheda frammenti sul pulsante clic

Il mio problema è che voglio fare un pulsante di aggiornamento, da posizionare su schede e quando lo preme, l'elenco degli articoli deve aggiornare o ricaricare e mantenere aperta la scheda corrente. Ho provato a sostituire il contenuto del frammento di tab e riaprirlo, ma quando faccio clic sul titolo di un articolo per aprirlo, il contenuto della scheda rimane in pila sotto tutti i frammenti. Dico che quando clicco sul titolo dell'articolo, si apre un nuovo frammento. Ho inviato un id degli articoli come argomento e nello stesso frammento apro il contenuto dell'articolo.

Stavo provando con questo codice ma senza successo.

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(); 
       } 

Più esattamente inserisco su App, premere Tab2 (visualizza l'elenco degli articoli da Tab2), premere il pulsante di aggiornamento, aprire un articolo, premere il pulsante posteriore del dispositivo mobile e mi mostra il contenuto di Tab2. Ora, accedo a tab1 (e mostro l'elenco degli articoli da tab1), apro un articolo dall'elenco di tab1, mostrami cosa mi serve e premo il pulsante indietro da cellulare. In questo momento viene mostrato il contenuto di tab2 (l'elenco degli articoli del modulo tab2 da dove ho premuto il pulsante di aggiornamento.).

Per aprire i dettagli di un articolo che uso:

  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(); 
        } 
       }); 

Grazie in anticipo per l'aiuto!

risposta

6

Per aggiornare il contenuto di un frammento, è possibile mantenere un riferimento al frammento e chiamare un metodo pubblico (ad esempio) refresh() in tale frammento. Esempio:

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> 

Ora, quando si crea il frammento di scheda, come il PupulareFragment, utilizzare la variabile di istanza pupulareFragment per memorizzare il frammento. Quindi è disponibile nel metodo onClick del pulsante di aggiornamento.

In questo modo non si sostituiscono/creano nuovi frammenti durante l'aggiornamento. Quindi, tornando alla schedaAttività dopo aver esaminato l'attività relativa ai dettagli degli articoli, probabilmente funzionerebbe benissimo.

+3

puoi elaborare un po 'sul metodo di aggiornamento? Non sono chiaro su quanto sarebbe stato aggiornato questo frammento – ChuckKelly

+0

Il metodo di aggiornamento può contenere funzioni per aggiornare gli elementi/dati ecc. Nel frammento. In realtà non fa nulla con il frammento stesso, ma non deve essere ricreato per aggiornare i dati al suo interno. – NickL

+1

È anche possibile accedere al frammento corrente tramite ((SectionsPagerAdapter) mViewPager.getAdapter()). 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(); 
} 

Prova questo, tutto ciò che è presente sotto la scheda verrà eseguito di nuovo.

Problemi correlati