如何从附加片段内部以编程方式打开主导航抽屉?

How can i open the main navigation drawer programmatically from inside the attached fragment?

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

首先创建导航抽屉的静态实例activity然后调用public从你的片段中改变片段的方法如下

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

使用自定义侦听器:

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