Autore Topic: aggiungere dinamicamente bottoni al fragment  (Letto 422 volte)

Offline domy88

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
  • Sistema operativo:
    ------
aggiungere dinamicamente bottoni al fragment
« il: 26 Aprile 2013, 23:39:49 CEST »
0
Ciao ragazzi, ho un problema con il fragment..

creo inizialmente 3 bottoni ma poi non riesco ad aggiungerne altri mentre in fragment è in esecuzione, mi potreste dare una mano?

Codice (Java): [Seleziona]
public class MenuFragment extends Fragment {
      ViewGroup dismissableContainer ;
   // activity listener
   private OnMenufragListener menufragListener;

   // interface for communication with activity
   public interface OnMenufragListener {
      public void onMenufrag(String s);
   
   }
   
   // onAttach
   @Override
   public void onAttach(Activity activity) {
      super.onAttach(activity);
      try {
         menufragListener = (OnMenufragListener) activity;
      } catch (ClassCastException e) {
         throw new ClassCastException(activity.toString()+" must implement OnMenufragListener");
      }
   }
   
   // onCreate
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      System.out.println("creato menu fragment");
     
   }

   // onActivityCreated
   @Override
   public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
   }
   
   // onCreateView
   @Override
   public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fr_menu,container,false);
     
        dismissableContainer = (ViewGroup)view.findViewById(R.id.dismissable_container);
      for (int i = 0; i < 3; i++) {
         final Button dismissableButton = new Button(getActivity());
          dismissableButton.setLayoutParams(new ViewGroup.LayoutParams(
                  ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
          dismissableButton.setText("Button " + (i + 1));
     
      dismissableContainer.addView(dismissableButton);
     
      }
     
      return view;
   }
   
 
   poi ho inserito un altro metodo che riceve dall'esterno un oggetto e crea il bottone che dovrebbe aggiungere ai 3 bottoni creati prima
però mi da errore...


 
Codice (Java): [Seleziona]
public void sendObject(Tavolo t){
           
         System.out.println("fragment-->tavolo n "+t.getNum_tav() );
         Button b=new Button(getActivity());
         b.setText(t.getNum_tav());
         
         
         
         ((ViewGroup) getView().findViewById(R.id.dismissable_container)).addView(b);
   }
   
}

 ((ViewGroup) getView().findViewById(R.id.dismissable_container)).addView(b);
questa parte di codice è l'errore .... come posso risolvere?
l'errore che mi da è il seguente https://www.dropbox.com/s/qvryctpavqr7091/Cattura.PNG

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:aggiungere dinamicamente bottoni al fragment
« Risposta #1 il: 27 Aprile 2013, 09:10:40 CEST »
+1
Prova a cambiare il codice in questo modo:

Codice (Java): [Seleziona]
public void sendObject(final Tavolo t){
        getActivity().runOnUiThread(new Runnable() {

            @Override
            public void run() {
                        System.out.println("fragment-->tavolo n "+t.getNum_tav() );
                 Button b=new Button(getActivity());
                 b.setText(t.getNum_tav());
                 ((ViewGroup) getView().findViewById(R.id.dismissable_container)).addView(b);
            }
        });
}

L'errore è chiaro, stai tentando di modificare la UI da un thread diverso dal main thread.

Offline domy88

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus 4
  • Sistema operativo:
    ------
Re:aggiungere dinamicamente bottoni al fragment
« Risposta #2 il: 27 Aprile 2013, 11:28:27 CEST »
0
Perfetto!! funziona benissimo... e se adesso volessi eliminare uno di questi bottoni?

Post unito: 27 Aprile 2013, 11:51:13 CEST
Ho risolto, ma comunque per chi potesse essere d'aiuto :

ViewGroup) getView().findViewById(R.id.dismissable_container)).removeViewAt(0);

rimuove il bottone in cima
« Ultima modifica: 27 Aprile 2013, 11:51:13 CEST da domy88, Reason: Merged DoublePost »