简体   繁体   English

从活动调用片段

[英]Call Fragment from activity

I have a Navigation drawer activity and it contains couple of Fragments .我有一个Navigation drawer活动,它包含几个Fragments My problem is I want to call the Navigation drawer activity class in button click which should have fragment B, by default navigation drawer has fragment A.我的问题是我想在button单击中调用Navigation drawer活动类,它应该有片段 B,默认情况下导航抽屉有片段 A。

I am posting my code here:我在这里发布我的代码:

 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();
        }
    });

Where content_frame is the area were I want to replace fragment B view.. content_frame 是我想替换片段 B 视图的区域。

try this approach试试这个方法

in your button click send extra data to check what fragment you need在您的按钮中单击发送额外数据以检查您需要的片段

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);

        }
    });

Now, in your oncreate() method of Navigation Activity现在,在导航活动的 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;

finally gotoFragment is...最后 gotoFragment 是...

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

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

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

Try below code;试试下面的代码;

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();
    }
});

Just make an instance of FragmentB like this像这样制作一个FragmentB实例

FragmentB fragment - new FragmentB();

and then pass it like this .然后像这样传递它。

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

now you can access all the variables and methods of fragment from your activity using instance fragment .现在您可以使用实例fragment从您的活动中访问片段的所有变量和方法。 like this fragment.methodName();像这个fragment.methodName();

Try this code:试试这个代码:

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();
        }
    });

hope it'll solve your problem.希望它能解决你的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM