【问题标题】:Call Fragment from activity从活动中调用片段
【发布时间】:2017-10-26 15:45:48
【问题描述】:

我有一个Navigation drawer 活动,它包含几个Fragments。我的问题是我想在button click 中调用Navigation drawer 活动类,它应该有片段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 视图的区域。

【问题讨论】:

  • 我无法访问 content_frame,它是导航抽屉活动的视图。因此,如果此(当前)活动中没有名为 content_frame 的视图,我无法将 FragmentB 替换为 content_frame。

标签: android


【解决方案1】:

试试这个方法

在您的按钮中单击发送额外数据以检查您需要的片段

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

        }
    });

现在,在 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;

最后 gotoFragment 是...

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

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

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

【讨论】:

  • 我会试试这个
【解决方案2】:

试试下面的代码;

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

【讨论】:

    【解决方案3】:

    只需像这样创建FragmentB 的实例

    FragmentB fragment - new FragmentB();
    

    然后像这样传递它。

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

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

    【讨论】:

      【解决方案4】:

      试试这个代码:

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

      希望它能解决你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-20
        • 2011-07-09
        • 2013-10-20
        • 2014-09-01
        • 1970-01-01
        • 2013-10-28
        • 1970-01-01
        相关资源
        最近更新 更多