【问题标题】:How can i open the main navigation drawer programmatically from inside the attached fragment?如何从附加的片段内部以编程方式打开主导航抽屉?
【发布时间】:2019-08-01 08:50:30
【问题描述】:

我已经创建了一个导航抽屉活动,我想删除该活动的工具栏并在不同的片段中使用自定义工具栏,现在我找不到从片段内部打开和关闭导航抽屉的任何方法。 就像在主导航活动中一样,可以通过单击汉堡菜单来打开和关闭抽屉,但是如何从附加的片段打开抽屉。

【问题讨论】:

  • 显示你尝试过的代码
  • 你的片段中需要活动的上下文

标签: android fragment navigation-drawer


【解决方案1】:

使用自定义监听器:

class Frag extends Fragment{

   NavigationOpenListener listener;

   public interface NavigationOpenListener{
      public void OnDrawerOpen();
   }

   public void openDrawer(){  // Call this method when you want to open drawer from your Fragment
      if(listener!=null)
      listener.OnDrawerOpen();
   }

   public void setOnDrawerOpenListener(NavigationOpenListener onDrawerOpenListener){
      this.listener=onDrawerOpenListener;
   }

}

并收听您的Activity

  Frag frag1=new Frag();
  frag1.setOnDrawerOpenListener(new Frag.NavigationOpenListener() {
     @Override
     public void OnDrawerOpen() {
        yourDrawerLayout.openDrawer(GravityCompat.START);
     }
  });

【讨论】:

  • 它对我有用,谢谢。我几乎忘记了接口。 :)
  • 不客气,感谢您的回答。
  • 也为我工作...谢谢
  • 也谢谢你。喜欢我的回答就够了))
  • 还有另一种方法..您可以在Parent Activity中编写一个方法来打开抽屉..在Fragment中您可以这样调用它 ((YourActivity)getActivity()).openDrawer();
【解决方案2】:

首先创建导航抽屉活动的静态实例,然后从您的片段中调用更改片段的公共方法,如下所示

public class MainActivity extends AppCompatActivity
{
    static MainActivity instance;

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

        instance=this;
    }

    public static MainActivity getInstance()
    {
        return instance;
    }

    public void changeFragment(Fragment targetFragment)
    {
            getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.fl_main_container, targetFragment, "fragment")
            .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
            .commit();
    }
}

从 Fragment 调用方法如下

MainActivity mainActivity=MainActivity.getInstance();
mainActivity.changeFragment(new FragmentHome());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多