public class Frammento extends Fragment { OnFragmentInteractionListener mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View v=inflater.inflate(R.layout.frammento,container,false); return v; } @Override public void onAttach(Context context){ super.onAttach(context); if(context instanceof com.antonello.frammenti.OnFragmentInteractionListener){ mListener=(OnFragmentInteractionListener)context; } } public interface OnFragmentInteractionListener{ public void onFragmentInteraction(); } }Questo è lo scheletro essenziale per creare un fragment.
Ora voglio aggiungervi un Button programmaticamente.
public class Frammento extends Fragment { Button button; LinearLayout mainLayout; OnFragmentInteractionListener mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View v=inflater.inflate(R.layout.frammento,container,false); button=new Button(v.getContext()); mainLayout=(LinearLayout)v.findViewById(R.id.mainLayout); mainLayout.addView(button); return v; } @Override public void onAttach(Context context){ super.onAttach(context); if(context instanceof com.antonello.frammenti.OnFragmentInteractionListener){ mListener=(OnFragmentInteractionListener)context; } } public interface OnFragmentInteractionListener{ public void onFragmentInteraction(); } }Ecco, ho aggiunto un button senza alcun listener.
Ora voglio vedere se "funziona".
Devo caricare il fragment nel Layout principale.
Provo con questo codice, se lo ricordo abbastanza bene:
public class MainActivity extends AppCompatActivity implements FragmentBarra.OnFragmentInteractionListener{ Helper helper; Fragment myFrag; FragmentManager fragmentManager=getSupportFragmentManager(); FragmentTransaction transaction; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myFrag=new Frammento(); transaction=fragmentManager.beginTransaction(); transaction.add(R.id.barra,myFrag,"myfrag"); transaction.commit(); } @Override public void onFragmentInteraction() { } }Il button c'è.
Ora dovrei collegare il ViewPager con un adapter.
Nella fattispecie si usa il FragmentPagerAdapter, che devo estendere.
Ci provo...
public class Adapter extends FragmentPagerAdapter{ public Adapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return null; } @Override public int getCount() { return 0; } }Già scrivendo l'estensione della classe Android Studio richiede l'implementazione dei metodi e la creazione del costruttore in automatico, per cui la cosa non presenta molti problemi.
Costruisco direttamente una nuova istanza del Fragment da inserire nell'altro LinearLayout, passandoci il numero di posizione attribuito dall'adapter:
public class Adapter extends FragmentPagerAdapter{ public Adapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { frag3=new Frammento3(); Bundle args=new Bundle(); args.putInt("num",position); frag3.setArguments(args); return frag3; } @Override public int getCount() { return 2; } }Nel codice del fragment ho una variabile int che accoglie nel metodo onCreate il numero attribuito come parametro, ossia position.
public class Frammento3 extends Fragment { OnFragmentInteractionListener mListener; int numero; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); numero=getArguments().getInt("num"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View v=inflater.inflate(R.layout.frammento3,container,false); TextView textView=(TextView)v.findViewById(R.id.textView2); textView.setText(numero+""); return v; } @Override public void onAttach(Context context){ super.onAttach(context); if(context instanceof OnFragmentInteractionListener){ mListener=(OnFragmentInteractionListener)context; } } }Senza fare quella costruzione con newInstance, della quale non ho, sinceramente, capito lo scopo.
Nessun commento:
Posta un commento