Fragment innerhalb des Fragments
Ich brauche Hilfe bei arbeiten auf fragment im inneren-fragment, eigentlich habe ich
bin mit einem problem konfrontiert, auf drücken der zurück-Taste. Anwendung Hauptfenster
hat Tasten und drücken jeder Taste anzeigen ersetzen mit neuen
- fragment und das fragment enthalten, die in einem anderen fragment),
dynamisch hinzufügen/ersetzen-fragment ist in Ordnung, durch drücken
button1-fragment ersetzt, das gleiche passiert beim drücken der Taste, aber wenn
I drücken Sie die Taste erneut, bekam eine Ausnahme:
"Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with
another fragment for com........ fragmentname"
bedeutet "fragment" oder " innere Fragmente sind bereits aufgenommen und ich bin versucht
fügen Sie Sie wieder, niemand hat Ahnung, wie das arbeiten mit fragment-innen
fragment und hin und her zu bewegen, ohne jedes problem, danke für die
Unterstützung.
MainActivity, wo Fragmente werden dynamisch Hinzugefügt und
ersetzt.
public class FragmentInsideFragmentTestActivity extends Activity {
private Button button1;
private Button button2;
private Button button3;
private Button button4;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 =(Button) this.findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonClick(view);
}
});
button2 =(Button) this.findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonClick(view);
}
});
button3 =(Button) this.findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonClick(view);
}
});
button4 =(Button) this.findViewById(R.id.button4);
button4.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
onButtonClick(view);
}
});
}
public void onButtonClick(View v) {
Fragment fg;
switch (v.getId()) {
case R.id.button1:
fg=FirstFragment.newInstance();
replaceFragment(fg);
break;
case R.id.button2:
fg=SecondFragment.newInstance();
replaceFragment(fg);
break;
case R.id.button3:
fg=FirstFragment.newInstance();
replaceFragment(fg);
break;
case R.id.button4:
fg=SecondFragment.newInstance();
replaceFragment(fg);
break;
}
}
private void replaceFragment(Fragment newFragment) {
FragmentTransaction trasection =
getFragmentManager().beginTransaction();
if(!newFragment.isAdded()){
try{
//FragmentTransaction trasection =
getFragmentManager().beginTransaction();
trasection.replace(R.id.linearLayout2, newFragment);
trasection.addToBackStack(null);
trasection.commit();
}catch (Exception e) {
//TODO: handle exception
//AppConstants.printLog(e.getMessage());
}
}else
trasection.show(newFragment);
}
}
Hier ist das Layout: main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
<LinearLayout android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button android:layout_width="wrap_content"
android:id="@+id/button1"
android:layout_height="wrap_content"
android:text="Button1"></Button>
<Button android:text="Button2"
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button android:text="Button3"
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button android:text="Button4"
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>
<LinearLayout android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"></LinearLayout>
</LinearLayout>
Hoffe, dass ich versucht klar mein problem.
InformationsquelleAutor der Frage Ijaz Ahmed | 2011-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK Fragmente nicht halten andere Fragmente.
UPDATE
Mit aktuellen Versionen des Android-Support-package-oder native-Fragmente auf API-Level 17 und höher -- Sie können die nest-Fragmente, die mittels
getChildFragmentManager()
. Beachten Sie, dass dies bedeutet, dass Sie müssen verwenden Sie die Android-Support-package-version der Fragmente auf API-Level 11-16, denn auch wenn es eine native version von Fragmenten, die auf diesen Geräten, dass die version nicht habengetChildFragmentManager()
.InformationsquelleAutor der Antwort CommonsWare
Seit Android 4.2 (API 17) verschachtelte Fragmente verfügbar http://developer.android.com/about/versions/android-4.2.html#NestedFragments
Platz fragment im fragment verwenden getChildFragmentManager()
Es auch in support library!
InformationsquelleAutor der Antwort Nik
Brauchte ich etwas mehr Kontext, also machte ich ein Beispiel um zu zeigen, wie das gemacht wird. Das hilfreichste, was ich Lesen während der Vorbereitung, war dies:
Aktivität
activity_main.xml
Hinzufügen
FrameLayout
um Ihre Aktivitäten zu halten, die Eltern-fragment.MainActivity.java
Laden die Eltern fragment und implementieren das fragment Zuhörer. (Siehe fragment Kommunikation.)
Eltern Fragment
fragment_parent.xml
Fügen Sie ein weiteres
FrameLayout
container für das Kind-fragment.ParentFragment.java
Verwenden
getChildFragmentManager
imonViewCreated
zu setzen, bis das Kind-fragment.Kind Fragment
fragment_child.xml
Es ist nichts besonderes hier.
ChildFragment.java
Es ist nichts besonderes hier entweder.
Hinweise
InformationsquelleAutor der Antwort Suragch
Fragmente Hinzugefügt werden können, in anderen Fragmente, aber dann werden Sie brauchen, um es zu entfernen aus dem Eltern-Fragment, jedes mal, wenn onDestroyView () - Methode des parent-fragment genannt wird. Und erneut fügen Sie es in der Eltern-Fragment der OnCreateView () - Methode.
Nur tun, wie diese :
InformationsquelleAutor der Antwort Napolean
Ich dieses problem gelöst. Sie können Support-library und die
ViewPager
. Wenn Sie nicht brauchen, swiping durch Geste aus, die Sie deaktivieren können, durchziehen. So, hier ist etwas code, um zu verbessern meine Lösung:P. S. Es ist hässlich-code in test -, sondern es verbessert, dass es möglich ist.
P. P. S Innen-fragment
ChildFragmentManager
übergeben werden sollenViewPagerAdapter
InformationsquelleAutor der Antwort Vetalll
können Sie
getChildFragmentManager()
Funktion.Beispiel:
Eltern-fragment :
Eltern-layout (
parent_fragment.xml
):Kind-Fragment:
InformationsquelleAutor der Antwort S.M_Emamian
Können Sie hinzufügen
FrameLayout
zu dem fragment, und ersetzen Sie es mit einem anderen fragment, wenn es initialisiert wird.Diese Weise kann man das andere fragment ist im ersten fragment.
InformationsquelleAutor der Antwort LoveBigPizza
Verwenden getChildFragmentManager(), Folgen Sie dem link :
Verschachtelte Fragment
InformationsquelleAutor der Antwort Hacker Celluloid
Gibt es keine Unterstützung für MapFragment, Android-team sagt, ist daran zu arbeiten, da Android 3.0. Hier mehr Informationen über das Problem http://code.google.com/p/android/issues/detail?id=15347&utm_source=buffer&buffer_share=acc72 Aber was können Sie tun, indem Sie ein Fragment, das gibt eine MapActivity. Hier ist ein code Beispiel. Dank inazaruk: https://github.com/inazaruk/examples/tree/master/MapFragmentExample
Wie es funktioniert:
-MainFragmentActivity ist die Tätigkeit, extends FragmentActivity und beherbergt zwei MapFragments.
-MyMapActivity extends MapActivity und hat MapView.
-LocalActivityManagerFragment hosts LocalActivityManager.
-MyMapFragment erstreckt LocalActivityManagerFragment und mit Hilfe von TabHost schafft eine innere Instanz MyMapActivity.
wenn Sie Zweifel haben, lassen Sie es mich bitte wissen
InformationsquelleAutor der Antwort rallat
Curently in verschachtelten fragment, das verschachtelte man(N) werden nur unterstützt, wenn Sie programmgesteuert generiert werden! Also zu diesem Zeitpunkt keine verschachtelten fragment-layout wird in xml-layout-Schema!
InformationsquelleAutor der Antwort Andrea Bellitto
Seinen nichts kompliziertes. Wir können nicht getFragmentManager() hier. Für die Verwendung von Fragmenten innerhalb einer Fragment, verwenden wir getChildFragmentManager(). Rest wird gleich sein.
InformationsquelleAutor der Antwort Wijay Sharma
Hallo ich löste dieses problem, indem pro Fragment in verschiedene layout.Und ich machte nur Verwandte Layout sichtbar gemacht und die andere Sichtbarkeiten gegangen.
Ich meine:
Bin ich davon ausgegangen, dass Sie öffnen Sie Ihre Seite als button 1 geklickt wird.Sie können Steuern Sie Ihre fragment Sichtbarkeiten auf klicken Sie auf Aktion.Sie können Verwandte Layout sichtbar und die anderen verschwunden und durch Fragment-Manager können Sie Ihre fragment.Dieser Ansatz funktioniert für mich.Und da Sicht, Sicht:Weg ist unsichtbar und es braucht nicht jeder Platz für layout-Zwecke, ich denke, dieser Ansatz nicht zu einem Speicherplatz-problem.
P. S:ich habe nur versucht, zu erklären, meine Lösung kann code syntax Fehler oder unvollständige Struktur.
InformationsquelleAutor der Antwort
Dass kann denen helfen, die arbeiten auf Kotlin Sie können mit extension-Funktion
so erstellen Sie eine kotlin-Datei lassen Sie uns sagen, "util.kt" und fügen Sie dieses Stück code
Sagen wir: dies ist die Klasse der Kind
Nun können die Kinder die Vater-fragment wie diese
wo R. id.fragmet_field ist die id des Layouts enthält das fragment.Das lyout ist in der Vater-fragment natürlich.
Hier ist ein Beispiel
father_fragment.xml:
InformationsquelleAutor der Antwort ZINA TAKLIT