Autore Topic: Condivisione Dati Tra Fragments si Blocca  (Letto 437 volte)

Offline xbandx

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
    • www.andreabandiera.it
  • Dispositivo Android:
    Galaxy S5, Nexus 10 , One Plus 2
  • Play Store ID:
    com.bandweb.mycpstore
  • Sistema operativo:
    Windows 10
Condivisione Dati Tra Fragments si Blocca
« il: 27 Ottobre 2013, 19:31:10 CET »
0
Salve  a tutti, ho un problema di implementazione:
Ho 4 Fragment implementati con 4 XML separati e suddivisi in 4 classi diverse Sector1,2,3,4 e in base alla pressione di un tasto nel Fragment Sector1 (aggiunta di prodotti) vorrei che tale lista fosse condivisa tra i Fragment 2 e 3 (Sector2 e Sector3).
Ho implementato un piccolo "motore" di condivisione che apparentemente funziona ma il problema sorge quando l'utente si sposta nel Sector3 per poi tornare al Sector1, il "motore" smette di funzionare e i dati non vengono piu' passati.
se eseguo il DEBUG alla riga:

Codice (Java): [Seleziona]
Sector2 Sector2Obj = (Sector2) getSupportFragmentManager().findFragmentById(R.id.pager);
                        Sector2Obj.setMessage(data);

ottengo un'eccezzione con questo messaggio:

com.bandweb.ordinifornitori.Sector1 cannot be cast to com.bandweb.ordinifornitori.Sector2

Come posso procedere per risolvere il problema?
Grazie
Andrea


Codice (Java): [Seleziona]
public class MainActivity extends FragmentActivity implements ActionBar.TabListener,
                                                                                                                                OnShareMyDataListener ,
                                                                                                                                NoticeDialogFragment.NoticeDialogListener{
public void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "MainActivity.onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        activity = this;
       
// Settare il tipo di navigazione
        mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
        final ActionBar actionBar = getActionBar();
       
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
 
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mAppSectionsPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                        actionBar.setSelectedNavigationItem(position);
            }
        });

        // creo icona e scritta per il 1 Tab
        Tab tab = actionBar.newTab()
                .setText(R.string.title_section1)
                .setTabListener(this)
                .setTag(R.string.title_section1)
                .setIcon(R.drawable.ic_menu_agenda);
        actionBar.addTab(tab);
 
        // creo icona e scritta per il 2 Tab
        tab = actionBar.newTab()
                .setText(R.string.title_section2)
                .setTabListener(this)
                .setTag(R.string.title_section2)
                .setIcon(R.drawable.ic_menu_send);
        actionBar.addTab(tab);
 
        // creo icona e scritta per il 3 Tab
        tab = actionBar.newTab()
                 .setText(R.string.title_section3)
                 .setTabListener(this)
                 .setTag(R.string.title_section3)                
                 .setIcon(R.drawable.phone);
        actionBar.addTab(tab);         
       
        // creo icona e scritta per il 4 Tab
        tab = actionBar.newTab()
                 .setText(R.string.title_section4)
                 .setTabListener(this)
                .setTag(R.string.title_section4)                
                 .setIcon(R.drawable.ic_menu_revert);
        actionBar.addTab(tab);         
 }
...
....
.... Questo e' il mio "motore"

 
Codice (Java): [Seleziona]
@Override
        public void onShareMyData(ArrayList<User> data) {
                // TODO Auto-generated method stub
        this.data = data;
       
        if(data != null){
                        Sector2 Sector2Obj = (Sector2) getSupportFragmentManager().findFragmentById(R.id.pager);
                        Sector2Obj.setMessage(data);   
                         
                         //Sector3 Sector3Obj = (Sector3) getSupportFragmentManager().findFragmentById(R.id.pager);
                         //Sector3Obj.setMessage(data);
        }
    }

nel file Sector1.java

Codice (Java): [Seleziona]
public class Sector1 extends Fragment implements NoticeDialogFragment.NoticeDialogListener
{
...
...

btnAggiungi.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                        // TODO Auto-generated method stub                     
                                        try {                              
                                        String Prodotto = String.valueOf(spin_prodotto.getSelectedItem());
                                        String Qta = "Qtà: "+ String.valueOf(EtQta.getText())+" "+String.valueOf(mySpinnerSize.getSelectedItem());            
                                        userAdapter.add(new User(Prodotto, Qta));
                                        userAdapter.notifyDataSetChanged();            
                                       
                                        sharedData.onShareMyData(userArray);
                                                               
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }                                          
                                }              
                        });    

OnShareMyDataListener sharedData;
       
        @Override
           public void onAttach(Activity activity) {
               super.onAttach(activity);
               try {
                   sharedData = (OnShareMyDataListener) activity/*getActivity()*/;
               } catch (ClassCastException e) {
                   throw new ClassCastException(activity.toString() + " must implement onShareMyData");
               }
               //sharedData.onShareMyData(userArray);
           }  


nel file Sector2.java

Codice (Java): [Seleziona]
public class Sector2 extends Fragment
{

...
...

     void setMessage(ArrayList<User> data){
                String str;
               
                txt = (TextView)rootView.findViewById(R.id.Et_ordine);
                if(!data.isEmpty()){
                        str = "[" + data.get(0).getName() + "]\n";// + data.get(0).getQta() + "]\n";
                        subject = str;
                    for (int i = 1; i < data.size(); i++) {
                        str += data.get(i).getName() + "(" + data.get(i).getQta() + ")\n";
                    }
                    txt.setText(str);
                }
        }

OnShareMyDataListener.java

Codice (Java): [Seleziona]
public interface OnShareMyDataListener {
    public void onShareMyData(ArrayList<User> data);
}

User.java

Codice (Java): [Seleziona]
public class User {
     String name;
     String qta;

     public String getName() {
      return name;
     }

     public void setName(String name) {
      this.name = name;
     }

     public String getQta() {
      return qta;
     }

     public void setQta(String qta) {
      this.qta = qta;
     }

     public User(String name, String qta) {
      super();
      this.name = name;
      this.qta = qta;
     }
    }