Switching between Fragments in a single Activity

后端 未结 3 1967
清酒与你
清酒与你 2021-02-03 10:12

I want to create an Activity which shows a sort of menu a user can go through. By clicking an item, a new screen is shown, allowing the user more options (wizard-li

相关标签:
3条回答
  • 2021-02-03 10:57

    Another option is to use the Android-WizardPager by Roman Nurik.

    Key features:

    • Branching, or the ability for wizard steps to influence the availability of later steps
    • Allowing the user to review before committing
    • Allowing the user freeform navigation between wizard steps
    • Support for required and optional steps
    • Support for step classes (technically, each step is an instance of a Java class, so you can have multiple instances within the wizard)

    More info here.

    0 讨论(0)
  • 2021-02-03 11:00

    I create this main layout:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="horizontal"
       tools:context="com.example.fragmentsexample.MainActivity" >
    
       <FrameLayout 
          android:id="@+id/contentFragment"
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent" 
          android:layout_weight="1" />
    
    </LinearLayout>
    

    And I replenished in the FrameActivity with:

    @Override
    public void onCreate(Bundle savedInstanceState) {
      ...
      Fragment fragment = new Dashboard();
      FragmentManager fm = getSupportFragmentManager();
      FragmentTransaction transaction = fm.beginTransaction();
      transaction.replace(R.id.contentFragment, fragment);
      transaction.commit();
      ...
    }
    

    And I repleace on onClick Method with the same code, changing Fragment (Dashboard for Events):

    @Override
    public void onClick.... {
      ...
      Fragment fragment = new Events();
      FragmentManager fm = getSupportFragmentManager();
      FragmentTransaction transaction = fm.beginTransaction();
      transaction.replace(R.id.contentFragment, fragment); //Container -> R.id.contentFragment
      transaction.commit();
      ...
    }
    
    0 讨论(0)
  • 2021-02-03 11:17

    Personally, I would not have any <fragment> elements.

    Step #1: Populate your activity layout with a <FrameLayout> for the variable piece of the wizard, plus your various buttons.

    Step #2: In onCreate() of the activity, run a FragmentTransaction to load the first wizard page into the FrameLayout.

    Step #3: On the "next" click, run a FragmentTransaction to replace the contents of the FrameLayout with the next page of the wizard.

    Step #4: Add in the appropriate smarts for disabling the buttons when they are unusable (e.g., back on the first wizard page).

    Also, you will want to think about how the BACK button should work in conjunction with any on-screen "back" button in the wizard. If you want them to both behave identically, you will need to add each transaction to the back stack and pop stuff off the back stack when you handle the "back" button.

    Someday, if nobody beats me to it, I'll try to create a wizard-by-way-of-fragments example, or perhaps a reusable component.

    0 讨论(0)
提交回复
热议问题