Update-Fragment in FragmentPagerAdapter in SherlockFragmentActivity

Ich bin nach dem Beispiel FragmentTabsPager unter den Proben von ActionBarSherlock.

In meinem Fall habe ich einen einfachen SherlockActivity mit der TabsPager und den gleichen code aus dem Beispiel für die FragmentPagerAdapter.

Ich habe zwei Fragmente (verschiedene Klassen). Die erste enthält nur vier Tasten. Je nachdem welche angeklickt wird, wird die Haupttätigkeit bekommt einen code (z.B. 1,2,3,4). Ich richtig den code für die gedrückte Taste.

Nun, in der zweiten Fragment will ich etwas zeichnen, abhängig von diesem code, oder, was dasselbe ist, die sich dynamisch aktualisieren, seiner Ansicht.

Ich habe schon gesucht nach einer Lösung aber ich habe nichts. In diesem Fall habe ich dieses:

[MainActivity.java]

      public static class TabsAdapter extends FragmentPagerAdapter
            implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {

private final Context mContext;
        private final TabHost mTabHost;
        private final ViewPager mViewPager;
        private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();    
[...]
    @Override
        public Fragment getItem(int position) {
            TabInfo info = mTabs.get(position);
            return Fragment.instantiate(mContext, info.clss.getName(), info.args);

    }

Ich es geschafft, aktualisieren Sie die Bundle-info.args, mit dem neuen Wert, aber ich weiß nicht, wie es passieren das fragment richtig und um es zu aktualisieren, seine dynamische Sicht.

Ist das möglich?

Vielen Dank im Voraus.

UPDATE

Schließlich habe ich das verwendet, was Sunny freundlicherweise erklärt. Ich hielt eine SparseArray mit meinem Fragmente also ich könnte auf jeden Fall der Zugang zu Ihnen, wie ich weiß, seine position innerhalb MainActivity:

[MainActivity.java]

    //Once the user presses the button on the first fragment, the callback calls
//this function
    public void onImageSelected(int iNumber){

    MySecondFragment msf = (MySecondFragment)mTabsAdapter.getFragment(POS_1);

        if(msf != null){

                msf.setNumImage(iNumber);               
                msf.updateView();                                   
            }                   
       }

Und schließlich in MySecondFragment.java ich kann auf meinem Layout-Komponenten (z.B. GridView), wie Sie initialisiert wurden während der onCreateView, also ich habe alle Codes die ich brauchte, in meinem updateView () - Methode.

Ich zum Beispiel, aktualisieren Sie den Inhalt eines GridView:

[MySecondFragment.java]

myGridView.setBackground(getResources().getDrawable(iCode));

HTH

UPDATE 2

Ich habe den folgenden code, um zu speichern Sie die Fragmente in den Zustand Bündel der wichtigsten Aktivitäten. Wenn die Anwendung änderungen von hochformat auf Querformat oder Umgekehrt (es ist neu) die Funktion getItem ist nicht genannt, so dass die SparseArray Karte ist nicht wieder aufgefüllt mit den nötigen Fragmente:

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putString(CURRENT_TAB, mTabHost.getCurrentTabTag());

        getSupportFragmentManager().putFragment(outState, MyFirstFragment.class.getName(), mTabsAdapter.getFragment(POS_1));

        getSupportFragmentManager().putFragment(outState, MySecondFragment.class.getName(),
                mTabsAdapter.getFragment(POS_2));
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        if (savedInstanceState != null) {

            MyFirstFragment mff = (MyFirstFragment) getSupportFragmentManager().getFragment(savedInstanceState, MyFirstFragment.class.getName());                           

            if(mff != null)
                mTabsAdapter.setFragment(POS_1, mff);

            MySecondFragment msf = (MySecondFragment) getSupportFragmentManager().getFragment(
                    savedInstanceState, MySecondFragment.class.getName());                          

            if(msf != null)
                mTabsAdapter.setFragment(POS_2, msf);

            mTabHost.setCurrentTabByTag(savedInstanceState
                    .getString(CURRENT_TAB));           
        }
    }

Auch innerhalb der TabsAdapter Klasse:

public Fragment getFragment(int pos) {
    return map.get(pos);
}

public void setFragment (int position, Fragment fragment) {
     map.put(position, fragment);
}

HTH

InformationsquelleAutor aloplop85 | 2013-04-18
Schreibe einen Kommentar