Autore Topic: Problema aggiornamento Fragment in un FragmentPageStateAdapter  (Letto 551 volte)

Offline ntakka

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
Problema aggiornamento Fragment in un FragmentPageStateAdapter
« il: 07 Dicembre 2012, 14:22:30 CET »
0
Ciao a tutti, come da oggetto ho un problema con l'aggiornamento di un fragment in un FragmentStatePageAdapter
Sto sviluppando un'applicazione che usa l' ActionBar.NAVIGATION_MODE_LIST e un viewPager.
Ogni volta che vado a selezionare un item del Drop-down menù mi va a cambiate l'adapter del viewPager; visto che la mia applicazione usa diversi scrollable-tabs.
Inizio con una panoramica per farvi capire un pò il contesto.
Questo snippet è implementato nella Mainactivity ed estende una FragmentActivity
Codice (Java): [Seleziona]
actionBar.setListNavigationCallbacks(mSpinnerAdapter,new OnNavigationListener() {

                        @Override
                        public boolean onNavigationItemSelected(int position,long itemId) {
                                switch (position) {
                                case 0:
                                        mViewPager.setAdapter(testFragmentPageAdapter);
                                        break;
                                case 1:
                                        mViewPager.setAdapter(pr);
                                        break;
                                }
                                return true;
                        }

                });
I due adapter sono due oggetti diversi passati al metodo setAdapter del viewpager.
Di seguito l'implementazione di uno dei due adapter
Codice (Java): [Seleziona]
public class TestFragmentPageAdapter extends FragmentStatePagerAdapter{
       
        private ArrayList<Fragment> listFragments;
       
        @Override
        public void notifyDataSetChanged() {
                super.notifyDataSetChanged();
                Log.d("notifyDataSetChanged", "Notificato");
        }

       

        public TestFragmentPageAdapter(FragmentManager fm) {
                super(fm);
                listFragments=new ArrayList<Fragment>();
                listFragments.add(new TestFragment());
                listFragments.add(new Test2Fragment());
        }

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

        @Override
        public int getItemPosition(Object object){
                return PagerAdapter.POSITION_NONE;
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
                switch (position) {
                case 0:
                        return "TAB 1";
                case 1:
                        return "TAB 2";
                }
                return null;
        }

Invece di seguito l'implementazione di uno dei fragment.
Precisamente quello di "TAB 1"
Codice: [Seleziona]
public class TestFragment extends Fragment {

        private String mprova;
        public TestFragment(){

        }

        public TestFragment(String prova ){
                this.mprova=prova;
                Log.d("Direction Fragment", "Costruttore with string");
        }


        public static TestFragment newIstanceFragment(String prova){
                Log.d("Test Fragment newIstance", "ris"+prova);
                TestFragment f=new TestFragment(prova);
                return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                        Bundle savedInstanceState) {
                Log.d("TestFragment onCreateView", "onCreate View");

                View root = inflater.inflate(R.layout.prova_layout, container, false);

                View tvE1= root.findViewById(R.id.position);

                ((TextView) tvE1).setText("Risultato"+mprova);
                Log.d("Direction Fragment onCreateView", "Risultato"+mprova);


                return root;
        }



Dopo avervi fatto capire un po il contesto vi espongo il problema.
Successivamente alla creazione del FragmentStatPageAdapter faccio una chiamata ad un server che mi restituisce un json; lo parso e di conseguenza dovrei aggiornare il fragment con le nuove informazioni ottenute dal server.
Attualmente provo ad aggiornare il fragment in questa maniera...dalla classe che estende l'AsyncTask
Codice: [Seleziona]
    TestFragment.newIstanceFragment(result);
                        //notifica al ViewPager che qualcosa è cambiato
                        fm.notifyDataSetChanged();

Ma praticamente non viene visualizzata la mia result nella textview nonostante i paramentri arrivino al metodo statico newIstance(result).
C'è qualcuno che mi potrebbe dare una mano per favore?
Grazie anticipatamente  :-)