Ich lerne, mobile Apps mit Java in Android Studio zu entwickeln. Ich habe nicht viel Mühe in die Layout-Datei gesteckt (ungefähr). Ich habe die Zeichenfolgendatei nicht verwendet, weil ich mich auf die Bildschirmumschaltung konzentriert habe.
FragmentManager```` FragmentTransaction
(Bildschirmübergang)
--Aktionsleiste mit addToBackStack
popBackStack
Rückkehroperation durch Klicken auf die Schaltfläche ZurückEine einfache App, mit der Sie das Hauptfragment für eine Aktivität vorbereiten und durch Drücken einer Taste von dort zwischen den beiden Fragmenten wechseln können. Aktivität 1 Fragment: 3 (1 Haupt-, 2 Unter-)
Klicken Sie auf diese Schaltflächen ① und ②, um zu Unterfragment 1 bzw. Unterfragment 2 zu wechseln.
Hauptbildschirm (MainFragment) |
---|
Sub1-Bildschirm (SubFragment1) |
---|
Sub2-Bildschirm (SubFragment2) |
---|
MainFragment.java
SubFragment(1, 2).java
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activityMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</FrameLayout>
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragmentMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="25dp"
android:text="Es ist das Hauptfragment"/>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="250dp"
android:layout_marginLeft="70dp"
android:textSize="25dp"
android:text="①"/>
<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="250dp"
android:layout_marginLeft="250dp"
android:textSize="25dp"
android:text="②"/>
</FrameLayout>
fragment_sub1.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/SubFragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubFragment1">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="25dp"
android:text="Es ist Unterfragment 1"/>
</FrameLayout>
fragment_sub2.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/SubFragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubFragment2">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="25dp"
android:text="Unterfragment 2" />
</FrameLayout>
MainActivity.java
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Rufen Sie die Methode auf und zeigen Sie standardmäßig MainFragment an
addFragment(new MainFragment());
}
//Definieren Sie eine Methode zum Anzeigen des Fragments (übergeben Sie das Fragment, das Sie als Argument anzeigen möchten).
private void addFragment(Fragment fragment) {
//Holen Sie sich Fragment Manager
FragmentManager manager = getSupportFragmentManager();
//Starten Sie die Fragmenttransaktion
FragmentTransaction transaction = manager.beginTransaction();
//Hauptfragment hinzugefügt
transaction.add(R.id.activityMain, fragment);
//Festschreiben einer Fragmenttransaktion. Der Fragmentstatus wird durch Festschreiben wiedergegeben
transaction.commit();
}
//Definieren Sie eine Methode, um die Zurück-Schaltfläche "←" auf die Aktionsleiste (obere Leiste) zu setzen.
public void setupBackButton(boolean enableBackButton) {
//Holen Sie sich die Aktionsleiste
ActionBar actionBar = getSupportActionBar();
//Setzen Sie die Schaltfläche "←", um zur Aktionsleiste zurückzukehren (Argument ist wahr):Anzeige falsch:Versteckt)
actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
}
}
Ich möchte das angegebene Fragment auf dem Bildschirm anzeigen, also "transaction.add"
Geben Sie einen solchen Wert als Argument ein
transaction.add (R-Wert des hinzuzufügenden Layoutbildschirmteils, hinzuzufügendes Fragmentobjekt (soll angezeigt werden));
MainFragment.java
MainFragment.java
public class MainFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Blasen Sie den als Fragment angezeigten Bildschirm aus der Layoutdatei auf
View view = inflater.inflate(R.layout.fragment_main, container, false);
//Holen Sie sich die übergeordnete Aktivität, zu der Sie gehören
MainActivity activity = (MainActivity) getActivity();
//Legen Sie den Titel in der Aktionsleiste fest
activity.setTitle("Hauptfragment");
//Schaltfläche "Zurück ausblenden" (Hauptfragment benötigt keine Schaltfläche "Zurück")
//Wenn Sie dies nicht auf false setzen, bleibt die Schaltfläche "Zurück" angezeigt, wenn Sie vom Unterfragment zurückkehren.
activity.setupBackButton(false);
//Schaltflächenelement abrufen
Button bt1 = view.findViewById(R.id.bt1);
Button bt2 = view.findViewById(R.id.bt2);
//① Verarbeitung beim Klicken auf die Schaltfläche
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Übergang zu SubFragment1
replaceFragment(new SubFragment1());
}
});
//② Verarbeitung beim Klicken auf die Schaltfläche
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Übergang zu SubFragment2
replaceFragment(new SubFragment2());
}
});
return view;
}
//Definieren Sie eine Methode zum Wechseln des anzuzeigenden Fragments (übergeben Sie das Fragment, das Sie als Argument anzeigen möchten).
private void replaceFragment(Fragment fragment) {
//Holen Sie sich Fragment Manager
FragmentManager manager = getFragmentManager(); //GetSupportFragmentManager in Aktivität()?
//Starten Sie die Fragmenttransaktion
FragmentTransaction transaction = manager.beginTransaction();
//Layout durch Fragment ersetzt (hinzugefügt)
transaction.replace(R.id.activityMain, fragment);
//Speichern Sie die Ersatztransaktion im Backstack
transaction.addToBackStack(null);
//Fragmenttransaktion festschreiben
transaction.commit();
}
}
Ich habe das Hauptfragment bereits angezeigt und möchte die Anzeige mit einem Klick auf eine Schaltfläche ändern. Verwenden Sie daher "transaction.replace"
Das Argument ist das gleiche Bild wie die Verarbeitung von add
transaction.replace (R-Wert des anzuzeigenden Layoutbildschirmteils, zu ersetzendes Fragmentobjekt (soll angezeigt werden));
Bei Unterfragmenten, die vom Hauptfragment übergegangen sind, möchten wir mit der Zurück-Schaltfläche "←" in der Aktionsleiste zum Hauptfragment zurückkehren können.
transaction.addToBackStack(null);
Durch die Beschreibung wird das vor dem Übergang angezeigte Fragment gespeichert.
Mit dieser Beschreibung im Übergangszielfragment
getFragmentManager().popBackStack();
Wenn Sie anrufen, können Sie zurückkehren, wenn Sie auf die Zurück-Schaltfläche "←" klicken.
SubFragment1.java / SubFragment2.java
SubFragment1.java
public class SubFragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Blasen Sie den als Fragment angezeigten Bildschirm aus der Layoutdatei auf
View view = inflater.inflate(R.layout.fragment_sub1, container, false);
//Holen Sie sich verbundene Elternaktivität
MainActivity activity = (MainActivity) getActivity();
//Legen Sie den Titel in der Aktionsleiste fest
activity.setTitle("Unterfragment 1");
//Schaltfläche Zurück anzeigen
activity.setupBackButton(true);
//Mit dieser Beschreibung kann das Aktionsleistenmenü im Fragment verwendet werden.
setHasOptionsMenu(true);
return view;
}
//Verarbeitung, wenn die Aktionsleisten-Taste gedrückt wird
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// android.R.id.Erkennt den Vorgang, wenn zu Hause die Zurück-Taste "←" gedrückt wird
case android.R.id.home:
//Führt den Prozess aus, um zu dem vor dem Übergang angezeigten Fragment zurückzukehren
getFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
SubFragment2.java
public class SubFragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Blasen Sie den als Fragment angezeigten Bildschirm aus der Layoutdatei auf
View view = inflater.inflate(R.layout.fragment_sub2, container, false);
//Holen Sie sich verbundene Elternaktivität
MainActivity activity = (MainActivity) getActivity();
//Legen Sie den Titel in der Aktionsleiste fest
activity.setTitle("Unterfragment 2");
//Schaltfläche Zurück anzeigen
activity.setupBackButton(true);
//Mit dieser Beschreibung kann das Aktionsleistenmenü im Fragment verwendet werden.
setHasOptionsMenu(true);
//Ansicht Ansicht ist gut?
return view;
}
//Verarbeitung, wenn die Schaltfläche in der Aktionsleiste gedrückt wird
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//Wenn die Zurück-Taste "←" Android gedrückt wird.R.id.Der Wert wird in home eingegeben
case android.R.id.home:
//Führt den Prozess aus, um zu dem vor dem Übergang angezeigten Fragment zurückzukehren
getFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
getFragmentManager (). PopBackStack ();
Diese Beschreibung kehrt zum vorherigen Fragment zurück.
Ich habe es diesmal nicht in den Inhalt aufgenommen, aber ich hoffe, dass ich in Zukunft über die Übertragung von Daten zwischen Fragmenten schreiben kann.
Ich bin seit weniger als einem Monat ein Anfänger, seit ich angefangen habe, Java / Android zu lernen. Wenn Sie Vorschläge haben, kommentieren Sie bitte.
Es war sehr leicht zu verstehen und war hilfreich! Vielen Dank!
Recommended Posts