2013-03-10 3 views
6

Ich bin currentky eine PagerTitleStrip in meiner Anwendung mit (Doc: http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html)dynamisch den Titel eines android.support.v4.view.PagerTitleStrip

Alles funktioniert gut, und ich habe den Titel wie folgt festgelegt:

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]; 
    } 
} 

Meine Sorge ist jetzt, dass, sobald das erste Fragment fertig geladen ist, ich habe den Titel des Bandes zu ändern.

Ich habe bereits versucht, die FragmentPagerAdapter zu bekommen und versuchte, es zu manipulieren, aber nie einen Titel (Text)

Es ist in der Tat eine getPageTitle Methode ändern Erfolg: mPagerAdapter.getPageTitle (Position), aber keine setPageTitle .. .

Jede Idee oder einen Vorschlag?

+0

Haben Sie versucht, PagerAdapter.notifyDataSetChanged() zu verwenden? – kape123

+0

@ kape123 Ich glaube, er weiß nicht, wie sonst, den fest verdrahteten Array etwas zu ändern. –

+0

@ kape123 Seine letzte Aussage führt mich zu glauben, es gibt in der Tat eine getPageTitle Methode: mPagerAdapter.getPageTitle (Position), aber keine setPageTitle' –

Antwort

11

Wenn ich verstehe Problem richtig - Sie Daten erhalten später und wollen dann Titel Array und Trigger-Refresh von Titeln aktualisieren.

Wenn das der Fall ist nur PagerAdapter.notifyDataSetChanged() auslösen; Nachdem diese Methode aufgerufen wurde, rufen Fragmente die Methode getPageTitle auf und aktualisieren sich selbst.

+0

Dies funktioniert gut, aber ich glaube, es ist die Kehrseite alle Seiten neu geladen werden muss: nicht so gut für die Leistung. –

-1

Art der hässlichen Lösung aber funktioniert: Iterieren Sie den visuellen Baum und stellen Sie den Text selbst.

Auch Sie müssen sich bewusst sein, dass gibt es eine erste transparente/leere Artikel auf der linken Seite. Hier

ist der Code (Xamarin hier), um den ersten Titel zu aktualisieren.

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

Warum ohne Erklärung zu downbooten? Ich möchte meine Fähigkeiten verbessern :) –