单击按钮更改片段

时间:2017-09-10 00:12:26

标签: android android-fragments

我在点击按钮时尝试更改片段。按钮位于片段内,我想转到另一个片段。此代码不会给出任何错误,但不会更改为所需的片段。它只是展示了容器的背景。请帮助我,为什么它只是显示容器的颜色而不是更改为新的片段。

这是我的第一个片段 -

public class IntroFragment1 extends Fragment {

    public IntroFragment1() {
        // Required empty public constructor
    }

    public static IntroFragment1 newInstance() {
        return new IntroFragment1();
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_intro1, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        /**
         * Button to go to next tab in tutorial
         * */
        Button nextScreen = getView().findViewById(R.id.nextTabButtonIntro);
        nextScreen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (vb1 != null) {
                    vb1.vibrate(300);
                }

                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                Fragment frag = IntroFragment2.newInstance();
                transaction.replace(R.id.containerIntroScreen, frag);
                transaction.commit();
            }
        });

    }//End of onViewCreated    
}

这是第一个片段的XML。下一个Button应该带我到下一个片段 -

<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:background="@color/colorPrimaryDark"
    android:orientation="vertical"
    android:weightSum="1"
    tools:context="com.example.fitbitsampleapp.AppIntroTabbedView.IntroFragment1">


        <TextView
            android:visibility="gone"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fontFamily="casual"
            android:text="Track your daily activities. Stay healthy, Stay smart."
            android:textSize="26dp" />

        <Button
            android:id="@+id/skipIntoButton"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_marginBottom="20dp"
            android:layout_marginRight="20dp"
            android:layout_weight="1"
            android:background="@drawable/background_button"
            android:fontFamily="casual"
            android:text="skip"
            android:textAllCaps="true"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:textColor="#000" />

        <Button
            android:id="@+id/nextTabButtonIntro"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_marginBottom="20dp"
            android:layout_marginRight="20dp"
            android:layout_weight="1"
            android:background="@drawable/background_button"
            android:fontFamily="casual"
            android:text="next"
            android:textAllCaps="true"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:textColor="#000" />

    </LinearLayout>

这是片段,我想去 -

public class IntroFragment2 extends Fragment {

    public IntroFragment2() {
        // Required empty public constructor
    }

    public static android.support.v4.app.Fragment newInstance() {
        IntroFragment2 fragment = new IntroFragment2();
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_intro2, container, false);
    }

第二片段的XML -

<RelativeLayout 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:background="@color/colorAccent"
 tools:context="com.example.fitbitsampleapp.AppIntroTabbedView.IntroFragment2">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:text="2nd fragment" />

</RelativeLayout>

这是包含片段的活动布局 -

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.fitbitsampleapp.AppIntroTabbedView.IntroScreen">


    <android.support.v4.view.ViewPager
        android:background="#00F111"
        android:id="@+id/containerIntroScreen"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />


</android.support.design.widget.CoordinatorLayout>

因此,最初应用程序按预期打开第一个交易。但是当我点击片段1中的下一个按钮时,它应该让我去片段2.但它只是在片段事务后显示ViewPager的背景颜色。

编辑: 这是我的主要活动,它有片段 -

public class IntroScreen extends AppCompatActivity {
    public static Vibrator vb1;
    public Button nextScreen;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intro_screen);

        /***/
        vb1 = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        /**
         *  Create the adapter that will return a fragment
         *  for each of the N primary sections of the activity.
         *  */
        SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        /** Set up the ViewPager with the sections adapter.*/
        ViewPager mViewPager = findViewById(R.id.containerIntroScreen);
        mViewPager.setAdapter(mSectionsPagerAdapter);

    }


    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        private SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }


        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            switch (position) {
                case 0:
                    return IntroFragment1.newInstance();

                case 1:
                    return IntroFragment2.newInstance();

                default:
                    return IntroFragment2.newInstance();
            }
        }


        @Override
        public int getCount() {
            return 2;
        }

    }
}

1 个答案:

答案 0 :(得分:1)

由@MikeM解决。在上面的评论中。

由于我已经在使用ViewPager,所以只需要为我的ViewPager提供正确的商品编号。

int THE_POSITION_OF_THE_FRAGMENT_IN_VIEW_PAGER = 1;
mViewPager.setCurrentItem(THE_POSITION_OF_THE_FRAGMENT_IN_VIEW_PAGER);