Ich habe ein Layout, das ein Fragment wie folgt enthält:
<fragment
android:id="@+id/mainImagesList"
android:name="com.guc.project.ImagesList"
android:layout_width="match_parent"
android:layout_height="62dp"
android:layout_below="@+id/addimagebutton"
android:layout_weight="1"
android:paddingTop="55dp" />
Jetzt muss ich dieses Fragment abrufen und umwandeln, damit ich es bearbeiten kann und die Updates angezeigt werden. Wie kann ich das machen ?!
EDIT: Ich denke, ich habe es geschafft, das Fragment zu bekommen, aber wenn ich einige Variablen ändere, erscheinen die Änderungen nicht!
Antworten:
Sie können die Fragmentinstanz wie folgt abrufen:
getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)
quelle
Wenn das Fragment in ein anderes Fragment eingebettet ist, benötigen Sie dies
getChildFragmentManager()
jedoch nichtgetFragmentManager()
. Definieren Sie beispielsweise im Layout-XML das Fragment wie folgt:<fragment android:name="com.aventlabs.ChatFragment" android:id="@+id/chatfragment" android:background="#ffffff" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:layout_marginTop="50dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" />
In Code können Sie die Fragmentinstanz folgendermaßen abrufen:
FragmentManager f = getChildFragmentManager(); FragmentTransaction transaction = f.beginTransaction(); chatFragment = f.findFragmentById(R.id.chatfragment); if (chatFragment != null) { transaction.hide(chatFragment); } transaction.commit();
quelle
Ich habe genau das gleiche in Android gemacht und den einfachsten Weg, dies in der Verwendung von Schnittstellen zu tun. Ich hatte eine Aktivität mit 6 Fragmenten und musste nur 3 davon aktualisieren.
ich benutze das
final Integer numeroFragments = ((PagerAdapterOfe) mViewPager.getAdapter()).getCount(); for (int i=0; i<numeroFragments; i++) { Object fragment = ((PagerAdapterOfe) mViewPager.getAdapter()).getItem(i); // If the fragment implement my interface, update the list if (fragment instanceof IOfertaFragment){ ((IOfertaFragment) fragment).actualizaListaOfertas(); } }
Wobei PageAdapterOfe mein Aktivitätsfragmentadapter ist. Ich schleife alle meine Fragmente und suche nach denen, die meine Schnittstelle implementieren. Wenn ich eine gefunden habe, führe ich die von meiner Schnittstelle definierte Methode aus und das ist!
Ich verwende diesen Code in der Aktivität, die alle Fragmente enthält. Als Antwort auf ein Sendesignal können Sie ihn dort platzieren, wo Sie ihn benötigen.
Die Schnittstelle:
public interface IOfertaFragment { public void actualizaListaOfertas(); }
quelle
Sie finden das Fragment mit findFragmentById (wenn Sie die Komponente kennen, in der es enthalten ist) oder mit findFragmentByTag (wenn Sie das Tag kennen).
Ich weiß nicht, welche Variablen Sie aktualisieren möchten, aber Sie können das Fragment mithilfe der FragmentTransaction-API durch ein anderes Fragment ersetzen.
Beispiele finden Sie unter http://developer.android.com/guide/components/fragments.html .
quelle
Wenn Fragment in der Layoutdatei von Activity enthalten ist, kann es von SupportFragmentManager wie ... referenziert werden.
MyFragment myFragment= (MyFragment)getSupportFragmentManager().findFragmentById(R.id.FRAGMENTID)
Wenn Fragment in der Layoutdatei eines anderen Fragments enthalten ist, kann es von ChildFragmentManager wie ... referenziert werden.
MyFragment myFragment= (MyFragment)getChildFragmentManager().findFragmentById(R.id.FRAGMENTID)
quelle