Fragment Intermediate (III): Creazione di un'attività che si alternerà tra frammenti onclick del rispettivo button

Scopo:

Crea un'attività che dispone di due pulsanti, button 1 e button 2. Quando fa clic su, il frammento alternerà tra i due frammenti.

  • Android: Programmaticamente Attiva WiFi hotspot
  • Relativelayout interno Scrollview non funziona
  • W / CameraBase: Si è verificato un errore durante la connessione alla camera: 0
  • come puoi sapere quando un'attività Android è terminata?
  • Errore di esecuzione di Android (scritto in Kotlin) progetto compilato con plugin Gradle2.0.0-alpha
  • Azione sull'applicazione uccisa in android
  • Sfondo:

    Fragmentone prenderà l'edittext dall'attività principale e il settext nella visualizzazione del text sul frammento. Fragmenttwo prenderà il text di visualizzazione al tablelayout. (Il mio ultimo objective è quello di utilizzare l'input della triggerszione principale e visualizzarlo in una delle tabelle di visualizzazione della tabella, ma non funziona, gentilmente li suggerisce) ## issue 1

    I problemi:

    Il button1 che dovrebbe visualizzare il frammento non funziona. Dopo aver digitato l'input nel edittext sull'attività principale, quando faccio clic sul button, il fragmenttwo persiste. FragmentOne non è venuto fuori. Mettere un toast in frammento e il toast visualizza il mio input.

    Speciale grazie a: desidero estendere un ringraziamento speciale a persone utili in questa comunità per guidarmi finora. E mi piacerebbe estendere il mio ringraziamento a Raghunandan che mi guida attraverso l'avanzamento del frammento I, II. Grazie mille per aver assistito nel mio path di apprendimento. Spero che le mie domande e il mio consiglio scoraggiante contribuiscano a ridurre la curva di apprendimento per chi ammira su questo viaggio.

    Fragment Intermedio (I)

    Fragment Intermediate (I): Ottenere input da edittext, impostare il text in una vista di text di un frammento

    Fragment Intermedio (II)

    Fragment Intermedio (II): Aggiunta dynamic di una row in un frammento, Android

    MainActivity.java

    import android.os.Bundle; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void selectFrag(View view) { Fragment fr; if(view == findViewById(R.id.button2)) { fr = new FragmentTwo(); } else { fr = new FragmentOne(); } FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); fragmentTransaction.commit(); } } 

    activity_main.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <TableLayout android:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/dis_input" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Input" /> <EditText android:id="@+id/input" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" /> </TableRow> <TableRow android:id="@+id/tableRow9" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="selectFrag" android:text="Button2" /> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="selectFrag" android:text="Calculate" /> </TableRow> </TableLayout> </FrameLayout> <fragment android:name="com.example.sample.FragmentTwo" android:id="@+id/fragment_place" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> 

    FragmentOne.java

     public class FragmentOne extends Fragment { @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_one, container, false); TextView warcraft= (TextView) view.findViewById(R.id.moargold); EditText moargold = (EditText) getActivity().findViewById(R.id.input); Double vespenegas = Double.parseDouble(moargold.getText().toString()); warcraft.setText(new Double(vespenegas).toString()); Toast toast = Toast.makeText(getActivity(),new Double(vespenegas).toString() , Toast.LENGTH_SHORT); toast.show(); return view; } } 

    fragment_one.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableLayout android:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/dis_moargold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Gold Count:" /> <TextView android:id="@+id/moargold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </TableRow> </TableLayout> </LinearLayout> 

    FragmentTwo.java

     public class FragmentTwo extends Fragment { @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_two, container, false); EditText input = (EditText) getActivity().findViewById(R.id.input); TableLayout tl=(TableLayout) view.findViewById(R.id.mainLayout); TableRow tr = new TableRow(getActivity()); tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView textview1 = new TextView(getActivity()); textview1.setText("happy"); tr.addView(textview1); TextView textview2 = new TextView(getActivity()); textview2.setText("unhappy"); //###############To insert text from editview to table // Double buygas = Double.parseDouble(input.getText().toString()); // textview2.setText(new Double(buygas).toString()); tr.addView(textview2); tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); return view; } } 

    fragment_two.xml

     <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ffff00"> <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/mainLayout"> <TableRow android:id="@+id/infoRow" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="First" android:id="@+id/column1" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> <TextView android:text="Second" android:id="@+id/column2" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </TableRow> </TableLayout> </LinearLayout> 

  • Configurazione di applicazioni Web Android
  • Non avviare MainActivity con android 2.3
  • Impostare un client Stomp in android con il framework Spring nel lato server
  • Android + MySQL usando com.mysql.jdbc.Driver
  • Come posso configurare il path dell'eseguibile Git in Android Studio?
  • ndk-gdb non riesce a trovare gdb.setup ma è sotto x86
  • 2 Solutions collect form web for “Fragment Intermediate (III): Creazione di un'attività che si alternerà tra frammenti onclick del rispettivo button”

    Basta avere FrameLayout e EditText in activity_main.xml . FrameLayout è un contenitore (ViewGroup) a cui si aggiungono o sostituiscono frammenti. Il tuo TableLayout può essere in layout di frammento.

    Stai aggiungendo / sostituendo il frammento in modo programmato, quindi qual è la necessità di avere lo stesso in xml.

    Avere questo in activity_main.xml

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/input" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:ems="10" > <requestFocus /> </EditText> <FrameLayout android:id="@+id/container" // id is container android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/button1" android:layout_below="@+id/input" > </FrameLayout> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignRight="@+id/input" android:onClick="selectFrag" android:text="Button1" /> <Button android:id="@+id/button2" android:onClick="selectFrag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/input" android:layout_alignParentBottom="true" android:text="Button2" /> </RelativeLayout> 

    Poi in MainActivity

      public class MainActivity extends Activity { Fragment fr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void selectFrag(View view) { if(view == findViewById(R.id.button2)) { fr = new FragmentTwo(); } else { fr = new FragmentOne(); } FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.container, fr); fragmentTransaction.commit(); } } 

    FragmentOne

     public class FragmentOne extends Fragment { @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag1, container, false); TextView warcraft= (TextView) view.findViewById(R.id.moargold); EditText moargold = (EditText) getActivity().findViewById(R.id.input); Double vespenegas = Double.parseDouble(moargold.getText().toString()); warcraft.setText(String.valueOf(vespenegas)); Toast toast = Toast.makeText(getActivity(),String.valueOf(vespenegas) , Toast.LENGTH_SHORT); toast.show(); return view; } } 

    frag1.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableLayout android:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/dis_moargold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Gold Count:" /> <TextView android:id="@+id/moargold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </TableRow> </TableLayout> </LinearLayout> 

    FragmentTwo

     public class FragmentTwo extends Fragment { @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag2, container, false); EditText input = (EditText) getActivity().findViewById(R.id.input); TableLayout tl=(TableLayout) view.findViewById(R.id.TableLayout01); TableRow tr = new TableRow(getActivity()); tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); TextView textview1 = new TextView(getActivity()); textview1.setText("happy"); tr.addView(textview1); TextView textview2 = new TextView(getActivity()); textview2.setText("unhappy"); //###############To insert text from editview to table // Double buygas = Double.parseDouble(input.getText().toString()); // textview2.setText(new Double(buygas).toString()); tr.addView(textview2); tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); return view; } } 

    frag2.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableLayout android:id="@+id/TableLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/dis_moargold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Gold Count:" /> <TextView android:id="@+id/moargold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </TableRow> </TableLayout> </LinearLayout> 

    schiocco

    immettere qui la descrizione dell'immagine

    Mentre aggiungete dynamicmente i tuoi Fragments , conservi il tuo FragmentTwo all'interno del tuo layout. Tenti di rimuoverlo nel tuo layout:

     <fragment android:name="com.example.sample.FragmentTwo" android:id="@+id/fragment_place" android:layout_width="match_parent" android:layout_height="match_parent"/> 

    Inoltre, nel codice, aggiungi dynamicmente un frammento e con il metodo di replace , imposta il contenitore come id fragment_place :

     fragmentTransaction.replace(R.id.fragment_place, fr); 

    Tuttavia, questo ID viene utilizzato dal tuo frammento ( FragmentTwo , il primo codice di codice di cui sopra) e non puoi sostituire un frammento che non viene aggiunto in modo dinamico. È necessario ospitare il tuo frammento all'interno di un FrameLayout ma il tuo non ha id, cercare di aggiungere questo:

     <FrameLayout android:id="@+id/fragment_place" /// this line to create and id android:layout_width="wrap_content" android:layout_height="wrap_content" > 

    Quindi, sarai in grado di ospitare, aggiungere e sostituire i tuoi frammenti nel tuo framelayout come vuoi.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.