如何使用另一个类中定义的参数?

0 android android-layout android-fragments android-navigation

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

private DrawerLayout drawerlayout;
Run Code Online (Sandbox Code Playgroud)

我在主要活动中使用它打开和关闭我的导航片段,但导航片段类中有3个特定按钮,我想使用导航片段功能drawerlayout.closedrawer(r.id.drawer) 但每次我在nav片段类中再次定义它并尝试添加它在这些按钮的onclick中,单击按钮后,应用程序崩溃并出现一个nullpointer异常.我如何进行相同的操作?

谢谢!以下是我的应用程序中的示例代码: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;
}
}
Run Code Online (Sandbox Code Playgroud)

在我的班级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?
Run Code Online (Sandbox Code Playgroud)

dym*_*meh 5

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

防爆.

public class YourFragment extends Fragment
{

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

  public interface OnCloseDrawerListener
  {
     void onCloseDrawer();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

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