0

我在定义为的主要活动中使用导航抽屉

private DrawerLayout drawerlayout;

我在主要活动中使用它来打开和关闭我的导航片段,但是导航片段类中有 3 个特定按钮,我想在其中使用导航片段功能drawerlayout.closedrawer(r.id.drawer) 但是每次我在导航片段类中再次定义它并尝试添加它在这些按钮的 onclick 中,单击按钮后,应用程序崩溃并出现空指针异常。我该怎么做?

谢谢!这是我的应用程序中的示例代码: public class navfragment extends fragment {

public interface OnCloseDrawerListener
      {
         void onCloseDrawer();
      }
    @Override
    public void onClick(final View v) {
        switch (v.getId()) {
            case R.id.button_logout:

                final DialogFragment dialog = new LogoutCancelSignoutDialogFragment(mLogoutListener);
                dialog.show(getActivity().getSupportFragmentManager(), AbsBaseaActivity.TAG_LOGOUT_DIALOG);
                BangoHelper.eventLogout();
                ((OnCloseDrawerListener)getActivity()).onCloseDrawer();
                break;
}
}

在我的课堂 MainActivity 中:

public class MainActivity extends AbsBaseaActivity implements OnBackStackChangedListener {
    private DrawerLayout drawerLayout;
protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        //----------Code for Navigation Drawer setup
        // 2. App Icon 
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        // 2.1 create ActionBarDrawerToggle
                 actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
                            R.drawable.arrow_up, R.string.drawer_open, R.string.drawer_close){

                        /** Called when a drawer has settled in a completely closed state. */
                        public void onDrawerClosed(View view) {
                           // getActionBar().setTitle(NavigationPanelFragment.activeFragmentTitle);
                           // invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                        }

                        /** Called when a drawer has settled in a completely open state. */
                        public void onDrawerOpened(View drawerView) {
                         //   getActionBar().setTitle(NavigationPanelFragment.activeFragmentTitle);
                          //  invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                        }
                    };


                // 2.2 Set actionBarDrawerToggle as the DrawerListener
                drawerLayout.setDrawerListener(actionBarDrawerToggle);

}
public  void onCloseDrawer()
       {
         drawerLayout.closeDrawer(R.id.drawer);
       }
    Even after modifying the code as per the given suggestion it crashes when I click on the button defined onclick for the fragment class, any clue?
4

1 回答 1

4

您可以将片段中的回调添加到您的活动以关闭抽屉..

前任。

public class YourFragment extends Fragment
{

  public void onClick(View v)
  {
    ((OnCloseDrawerListener)getActivity()).onCloseDrawer();
  }

  public interface OnCloseDrawerListener
  {
     void onCloseDrawer();
  }
}

然后在您的活动中,您需要实现此接口

public class MyActivity extends Activity implements OnCloseDrawerListener
{
   @Override
   public  void onCloseDrawer()
   {
        // add whatever code you need to close the drawer
   }

}

显然,您可以将此接口命名为更准确地代表您的需求的名称,并将您需要的任何参数传递给它

于 2013-11-20T21:41:03.467 回答