Navigieren Sie unter Fragmenten innerhalb einer Aktivität

Ich möchte eine Aktivität verwenden, die mehrere Fragmente enthält und unter den Fragmenten navigiert. Zum Beispiel gibt es in der Aktivität eine Listenansicht, die ein Fragment ist, wenn der Benutzer ein Element aus der Liste auswählt, wird die Ansicht zu einem anderen Fragment navigieren, wie könnte das implementiert werden?

Ich weiß, es gibt ein schönes Tutorial auf der Entwickler-Website, aber es behandelt den Tablet-Bildschirm, in dem zwei Fenster-Layout mit einem Listen-Fragment und ein detailliertes Fragment zeigt in einem Bildschirm. Ich möchte nur unter Fragmenten navigieren, ohne zwei Fragmente in einem Bildschirm zu zeigen.

Gibt es Tutorials können mir lehren, wie es zu tun?

  • Materialdesign Rückwärtskompatibilität android: colorAccent erfordert API Level 21 bei der Verwendung von appcompat7
  • Circular Steigung in Android
  • Warum wechselt mein Mauszeiger zu einem Pluszeichen in Eclipse?
  • Stuck bei "Dumping Speicher, App wird einfrieren. Brrr. "Nachricht
  • Wie kann man die Genauigkeit von Beschleunigungssensoren und Kompass-Sensoren verbessern?
  • Bewegen von Android / Eclipse-Projekt auf neuen PC
  • Paket Unmarshalling unbekannter Typcode
  • Wie man ein projekt in eklipse eröffnet
  • 2 Solutions collect form web for “Navigieren Sie unter Fragmenten innerhalb einer Aktivität”

    In der Nussschale ist die Antwort auf Ihre Frage, um Ihre Host-Aktivität zu benachrichtigen und dann Ihre Host-Aktivität ersetzen Sie Ihre aktuellen Fragment Container mit FragmentManager.

    Einer der Ansatz ist es, eine Schnittstelle in Ihrem ersten Fragment zu machen, haben Sie Ihre Host-Aktivität registrieren / hören (implementieren) an diese Schnittstelle und dann haben Sie Ihre FragmentManager, um den Container-Inhalt mit dem zweiten Fragment auf Listener Callback zu ersetzen.

    Ich bin mir nicht sicher über Tutorial aber hier ist mein Snippet: First Fragment

    public class First extends Fragment{ private static onMySignalListener listener; //call this function from whatever you like ie button onClickListener public void switchWindow() { if(listener != null){ listener.onMySignal(); } } public interface onMySignalListener { //customize this to your liking //plain without argument void onMySignal(); //with argument void onMySignalWithNum(int mNum); } public static void setOnMySignalListener(onMySignalListener listener) { First.listener = listener; }} 

    Host-Aktivität

     public class HostActivity extends FragmentActivity implements onMySignalListener{ private final String ADD_TAG_IF_NECESSARY = "mTag"; @Override public void onCreate(Bundle ssi) { setContentLayout(R.layout.main); FirstFragment.setOnMySignalListener(this); } @Override public void onMySignal() { //if you're using compat library FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); //initialize your second fragment sfragment = SecondFragment.newInstance(null); //replace your current container being most of the time as FrameLayout transaction.replace(R.id.container, fragment, ADD_TAG_IF_NECESSARY); transaction.commit(); } @Override public void onMySignalWithNum(int mNum) { //you can do the same like the above probably with your own customization }} 

    Dies ist nur ein Beispiel dafür, wie du die Schnittstelle implementierst. Und bitte beachten Sie, dass dies nicht effektiv ist, wenn Sie eine Menge Fragment wollen, um Ihre Host-Aktivität über etwas zu benachrichtigen. Dies wird dazu führen, dass Sie verschiedene Zuhörer auf Ihre Host-Aktivität zu implementieren.

     I think this will be useful for you. example of two fragments in one screen works independently =========================================================== public class MainActivity extends Activity { enter code here @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); Fragment newFragment = new Test(); FragmentTransaction transaction = getFragmentManager() .beginTransaction(); transaction.add(R.id.UprLayout, newFragment); // transaction.addToBackStack(null); transaction.commit(); Fragment newFragment2 = new TestRight(); FragmentTransaction transaction2 = getFragmentManager() .beginTransaction(); transaction2.add(R.id.dwnLayout, newFragment2); // transaction.addToBackStack(null); transaction2.commit(); } } ----------------------------- main_activity layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout2" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center|center_horizontal" android:orientation="vertical" > <LinearLayout android:id="@+id/UprLayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical" > </LinearLayout> <LinearLayout android:id="@+id/dwnLayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical" > </LinearLayout> </LinearLayout> ------------------------------------ public class Test extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } TextView tv; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.test, container, false); return view; } } --------------------------- public class TestRight extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.test_right, container, false); return view; } @Override public void onStart() { super.onStart(); Button button = (Button)getActivity().findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Fragment newFragment = new Right2nd(); FragmentTransaction transaction = getFragmentManager() .beginTransaction(); transaction.replace(R.id.dwnLayout, newFragment); transaction.addToBackStack("aa"); transaction.commit(); // transaction.add(R.id.frag, newFragment).commit(); } }); } } ------------------------------- test layout <?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:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="test" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="50sp" /> </LinearLayout> ------------------------------------ test_right layout <?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:gravity="center" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test right" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="45sp" /> </LinearLayout> ------------------------------------- public class Right2nd extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View vw= inflater.inflate(R.layout.right_2nd, container, false); return vw; } } ------------------------------------------- right_2nd layout <?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:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Right 2nd" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="50sp" /> </LinearLayout> -------------------------------------------- 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.