替换FrameLayout布局中的片段

时间:2016-02-11 08:38:57

标签: android android-fragments android-studio

我在第一个google页面上尝试了关于android片段的每个教程,但我无法正常工作。

所以我有一个导航栏活动MainActivity。 现在我想在抽屉里点击一下来改变片段。

在我的content_mainMainActivity活动中的默认片段)中,我有一个framelayout,我希望将片段放入。我有以下片段:fragment_main,{{ 1}}和fragment_one。我希望在点击导航抽屉中的按钮时显示这些内容。

我想使用片段的原因是导航抽屉将保持在最顶层。

提前致谢!

编辑:这是我用来改变片段的功能:
它只是为了测试,而不是完成。

fragment_two

4 个答案:

答案 0 :(得分:6)

我解决了!

显然,我必须使用android.support.v4.app.Fragment;而不是android.app.Fragment;。 这是我使用它的代码:

protected void setFragment(Fragment fragment) {
    android.support.v4.app.FragmentTransaction t = getSupportFragmentManager().beginTransaction();
    t.replace(R.id.fragment_container, fragment);
    t.commit();
}

要设置它(从导航栏onNavigationItemSelected(),您可以执行此操作:

setFragment(new RoosterFragment());

我希望这可以帮助其他人解决同样令人沮丧的问题。

答案 1 :(得分:1)

你尝试过这个吗? Click here

此链接可以帮助您创建fragment。 这就是你想要的导航抽屉 Click here

答案 2 :(得分:1)

根据您的问题,

这是 FrameLayout

<FrameLayout
        android:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/view"
        android:layout_marginTop="@dimen/medium_margin"></FrameLayout>

现在,调用活动的displayview方法onCreate(),

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    //rest of your code here
    displayView(0); // fragment at 0 position
}

displayView方法,有三个方法

public void displayView(int position) {
        switch (position) {
            case 0:
                tvTitle.setText(getResources().getString(R.string.signin_tile));
                showFragment(new LoginFragment(), position);
                break;
            case 1:
                tvTitle.setText(getResources().getString(R.string.forgot_password_tile));
                showFragment(new ForgotPasswordFragment(), position);
                break;
            case 2:
                tvTitle.setText(getResources().getString(R.string.change_password_tile));
                showFragment(new ChangePasswordFragment(), position);
                break;

        }
    }
从displayView方法调用

showFragment方法

public void showFragment(Fragment fragment, int position) {
        FragmentTransaction mTransactiont = getSupportFragmentManager().beginTransaction();

        mTransactiont.replace(R.id.main_container, fragment, fragment.getClass().getName());
        mTransactiont.commit();
    }

答案 3 :(得分:0)

试试这个。这是我的新手代码更容易理解:)

FragmentTransaction transaction;

switch (id){
            case R.id.button_fragment_one:
                    transaction = getSupportFragmentManager().beginTransaction();
                    transaction.replace(R.id.frame_layout, new FragmentOne());
                    transaction.addToBackStack(null);
                    transaction.commit();
                break;
            case R.id.button_fragment_two:
                    transaction = getSupportFragmentManager().beginTransaction();
                    transaction.replace(R.id.frame_layout, new FragmentTwo());
                    transaction.commit();
                break;
            default:
                break;
}