Autore Topic: Problema con i fragment  (Letto 353 volte)

Offline giorda76

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
Problema con i fragment
« il: 13 Ottobre 2013, 01:28:59 CEST »
0
CIao ragazzi sono nuovo di questo forum, vi contatto perchè non so proprio piu dove sbattere la testa.
Vi spiego il mio problema:

Voglio realizzare un APP che ha due framelayout, nel primo ( quello di sx ) inserisco dei pulsanti, nel secondo ( quello di dx) in base al pulsante cliccato dovra visualizzare un fragment con contenuto una textview ( con al suo interno un testo)

Codice xml dei due framelayout
Codice: [Seleziona]
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"  >
   
    <fragment
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="1" 
        android:id="@+id/fragmentsx"
        class="com.example.fragm.sx"
        /> 
    <fragment 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_weight="2" 
        android:id="@+id/fragmentdx"
        class="com.example.fragm.dx"
        /> 
</LinearLayout>

Fino a qui non ci sono problemi, nel senso che nel main faccio questo

Codice: [Seleziona]
         
public class MainActivity extends FragmentActivity implements OnSelectionListener{

 protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //invece di usare nel layout activity_main i fragment, utilizzare i framelayout, in questo modo con queste istruzioni possiamo associare a ogni framelayout
            //la classe che estende fragment
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
           
                            sx fragment = new sx();
                            dx fragment1 = new dx();
                           
                            fragmentTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
                            fragmentTransaction.replace(R.id.fragmentsx , fragment);
                            fragmentTransaction.replace(R.id.fragmentdx , fragment1);
                            fragmentTransaction.commit();
                           
          }

Il problema è adesso, visto che quando clicco su un altro pulsante ( contenuto framelayout sx) vorrei sostituire il fragment1 con fragment2 (usando sempre FragmentTransaction  come per il caso sopra indicato) e vorrei a questo punto che nella classe fragment2 venisse eseguito il metodo onCreateView ma in questo caso non mi esegue il metodo

metodo per la sostituzione del fragment1 con fragment2
Codice: [Seleziona]
                   
                               dxnuovo fragment2=new dxnuovo();
                                FragmentTransaction ft = getFragmentManager().beginTransaction();
                                ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
                                ft.replace(R.id.fragmentdx, fragment2, "detailFragment");
                                // Start the animated transition.
                                 ft.commit();
                                dxnuovo  centralFragment=(dxnuovo ) getFragmentManager().findFragmentById(R.id.fragmentdx); 
                                centralFragment.showCityDetails(cityName);
                               

l' errore che mi viene indicato è quello che l' oggetto centralFragment è null, chiaro non passando per il metodo oncreateview mi restituisce null

classe fragment 2

Codice: [Seleziona]
public class dx2 extends Fragment{
        private View view=null;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                view = inflater.inflate(R.layout.dx2 , container, false);
                return view;
        }

    public void showCityDetails(String city) 
    { 

        TextView testomio= (TextView) view.findViewById(R.id.pluto);
        testomio.setText("city");
   
    }
}


Spero di essere stato abbastanza chiaro, voglio recuperare gli oggetti (textview) contenute nei vari fragment, pero se non entro nel metodo oncreateview non posso!

P.s: Io penso che un framelayout non puo avere piu di un fragment associato, sbaglio? se fosse cosi come potrei fare ?


chiedo aiuto a tutti per risolvere questo problema

grazie


Ragazzi ho notato una cosa strana, se tolgo questa parte di codice

dx centralFragment=(dx) getFragmentManager().findFragmentById(R.id.fragmentdx); 
// TODO Auto-generated method stub
centralFragment.showCityDetails(cityName);

e lascio solo    

ft.commit();

entro nel metodo oncreateview, altrimenti no!!

Ma come faccio a recuperare le view contenute all'interno del layout del fragment?

Grazie a tutti
« Ultima modifica: 14 Ottobre 2013, 17:38:04 CEST da giorda76 »