从活动中调用Fragment

时间:2017-10-26 06:58:32

标签: android

我有Navigation drawer个活动,其中包含几个Fragments。我的问题是我想调用Navigation drawer点击button活动类,其中应该有片段B,默认导航抽屉有片段A。

我在这里发布我的代码:

 back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(getApplicationContext(),Navigation.class));
            FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
            tx.replace(R.id.content_frame, new FragmentB());
            tx.commit();
            finish();
        }
    });

如果content_frame是我要替换片段B视图的区域..

4 个答案:

答案 0 :(得分:2)

尝试这种方法

在您的按钮中单击

发送额外数据以检查您需要的片段

back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), Navigation.class);
    intent.putExtra("SELECTEDVALUE", 2);//1 for fragament A use 2 for fragment B
    startActivity(intent);

        }
    });

现在,在导航活动的oncreate()方法

Bundle extras = savedInstanceState != null ? savedInstanceState : getIntent().getExtras();
        int selectedValue = extras.getInt("SELECTEDVALUE");

switch (selectedValue) {
                case 1:
                    goToFragment(new A(), false);

                    break;
                case 2:
                    goToFragment(new B(), false);

                    break;

最后gotoFragment是......

private void goToFragment(Fragment fragment, boolean addToBackStack) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        if (addToBackStack) {
            transaction.addToBackStack(null);
        }

        transaction.replace(R.id.container, fragment).commit();
    }

答案 1 :(得分:0)

尝试以下代码;

back.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        Fragment fragment = new FragmentB();
        FragmentManager fm =getActivity().getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.content_frame, fragment);
        ft.commit();
    }
});

答案 2 :(得分:0)

只需制作FragmentB这样的实例

FragmentB fragment - new FragmentB();

然后像这样传递它。

tx.replace(R.id.content_frame, fragment);
tx.commit();

现在,您可以使用实例fragment访问活动中片段的所有变量和方法。像这样fragment.methodName();

答案 3 :(得分:0)

试试这段代码:

back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getActivity().getSupportFragmentManager().beginTransaction()
                            .add(R.id.content_frame, new FragmentB(), "fragmentB").addToBackStack(null).commit();
        }
    });

希望它能解决你的问题。