2012-11-29 12 views
10

Jestem naprawdę nowy w systemie Android i wdrażam mały projekt, w którym mam wiadomości z jednej strony Drupala. Ta aplikacja ma 3 karty, a każda karta zawiera listę artykułów z określoną zawartością. Lista artykułów tworzona jest za pomocą odsłon i widoków obrazu ułożonych w Linelayout. Kiedy klikam na tytuł, artykuł otwiera się ze szczegółami. Artykuły te są ładowane ze strony Drupal poprzez HTTP POST i moduł ViewJSON. Karty tworzone są za pomocą FragmentActivity i TabHost. Wszystko w porządku i działa dobrze do tego momentu.Jak odświeżyć zawartość zakładki fragmentów na przycisku kliknij

Mój problem polegał na tym, że chcę wykonać jeden przycisk odświeżania, który ma zostać umieszczony na kartach, a kiedy go kliknę, lista artykułów musi zostać odświeżona lub przeładowana, a otwarta zakładka musi być otwarta. Próbowałem zastąpić treść fragmentu tabulatora i ponownie go otworzyć, ale gdy kliknę na tytuł jednego artykułu, aby go otworzyć, zawartość karty pozostanie w stosie pod wszystkimi fragmentami. Wspominam, że po kliknięciu tytułu artykułu otwiera się jeden nowy fragment. Wysłałam id artykułów jako argument i w tym samym fragmencie otwieram treść artykułu.

Próbowałem z tym kodem, ale bez powodzenia.

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

Dokładniej wchodzę na aplikacji, naciśnij kartę Karta2 (wyświetlić listę artykułów z Karta2), naciśnij przycisk odświeżania, otwartego jednego artykułu, naciśnij przycisk Wstecz na urządzeniu przenośnym i pokaż mi zawartość Karta2. Teraz wchodzę na zakładkę1 (i wyświetlam listę artykułów z zakładki1), otwieram jeden artykuł z listy tab1, pokaż mi, czego potrzebuję, i naciśnij przycisk wstecz na urządzeniu mobilnym. W tym momencie wyświetlana jest zawartość tab2 (lista artykułów z zakładki 2, od której nacisnąłem przycisk odświeżania.).

Aby otworzyć szczegóły artykule używam:

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

Z góry dzięki za pomoc!

Odpowiedz

6

Aby odświeżyć zawartość fragmentu, można zachować odniesienie do fragmentu i wywołać publiczną (na przykład) metodę refresh() w tym fragmencie. Przykład:

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> 

Teraz podczas tworzenia fragment zakładki, jak PupulareFragment użyć zmiennej instancji pupulareFragment do przechowywania fragmentu. Jest więc dostępny w przycisku odświeżania onClick method.

W ten sposób nie wymieniasz/nie tworzysz żadnych nowych fragmentów podczas odświeżania. Wracając do tabActivity po przejściu do szczegółowej informacji o artykułach, prawdopodobnie też będzie dobrze działać.

+3

Czy możesz opracować nieco metodą odświeżania? Nie jestem pewien, jak to by było odświeżyć fragment nadal. – ChuckKelly

+0

Metoda odświeżania może zawierać funkcje odświeżania elementów/danych itp. W fragmencie. To naprawdę nie robi nic z samym fragmentem, ale nie musi być ponownie tworzone, aby zaktualizować dane w nim. – NickL

+1

Możesz również uzyskać dostęp do bieżącego fragmentu za pomocą ((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(); 
} 

Spróbuj tego, wszystko, co jest obecne w zakładce, zostanie wykonane ponownie.

Powiązane problemy