2013-03-10 14 views
6

jestem currentky użyciu PagerTitleStrip w mojej aplikacji (Doc: http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html)Dynamicznie zmienić tytuł android.support.v4.view.PagerTitleStrip

wszystko działa poprawnie, a ja ustawić tytuł tak:

public class PageAdapter extends FragmentPagerAdapter { 

    private List<Fragment> fragments; 

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return this.fragments.get(position); 
    } 

    @Override 
    public int getCount() { 
     return this.fragments.size(); 
    } 

    String[] titles = { "1", "2", "3", "4","5" }; 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return titles[position]; 
    } 
} 

Moim problemem teraz jest to, że po raz pierwszy fragment zakończeniu ładowania, muszę zmienić tytuł taśmy.

już próbował dostać FragmentPagerAdapter i starał się go manipulować, ale nigdy nie uda się zmienić tytuł (tekst)

rzeczywiście istnieje metoda getPageTitle: mPagerAdapter.getPageTitle (pozycja), ale nie setPageTitle ..

Czy masz pomysł lub sugestię?

+0

Czy próbowałeś użyć PagerAdapter.notifyDataSetChanged()? – kape123

+0

@ kape123 Myślę, że nie wie, jak zmienić hardcoded tablicy na coś innego. –

+0

@ kape123 Jego ostatnie stwierdzenie prowadzi mnie do przekonania, że ​​jest inaczej "Istnieje metoda getPageTitle: mPagerAdapter.getPageTitle, ale bez setPageTitle" –

Odpowiedz

11

Jeśli dobrze rozumiem problem - otrzymasz dane później, a następnie chcesz zaktualizować tablice tytułów i uruchomić odświeżanie tytułów.

Jeśli tak jest, wystarczy wywołać PagerAdapter.notifyDataSetChanged(); po wywołaniu tej metody Fragments wywoła metodę getPageTitle i sam się zaktualizuje.

+0

To działa ładnie, ale uważam, że ma przeładowanie wszystkich stron: nie tak dobre dla wydajności. –

-1

Trochę brzydkie rozwiązanie, ale działa: iteruj do wizualnego drzewa i ustawić tekst samodzielnie.

Należy również pamiętać, że jest pierwszy przezroczysty/pusty element po lewej stronie.

Oto kod (Xamarin tutaj), aby zaktualizować pierwszy tytuł.

var firstHidedOneFound = false; 
for (int i = 0; i < _tabstrip.ChildCount; ++i) 
{ 
    var child = _tabstrip.GetChildAt(i) as TextView; 

    if (child == null) { continue; } 
    if (!firstHidedOneFound) 
    { 
     firstHidedOneFound = true; 

     continue; 
    } 
    child.Text = ViewModel.MyShowPanelTitle; 
    break; 
} 
+0

Dlaczego w dół bez wyjaśnienia? Chciałbym poprawić swoje umiejętności :) –

Powiązane problemy