Как использовать параметр, определенный в другом классе?

Я использую навигационный ящик в своей основной деятельности, определенной как

private DrawerLayout drawerlayout;

Я использую его в основном упражнении, чтобы открывать и закрывать фрагмент навигации, но в классе фрагментов навигации есть 3 специальные кнопки, в которых я хотел бы использовать функциональность фрагмента навигации. drawerlayout.closedrawer(r.id.drawer)Но каждый раз, когда я снова определяю его в классе фрагментов навигации и пытаюсь добавить его в щелчок для этих кнопок, после нажатия кнопок приложение вылетает с исключением с нулевым указателем. Как мне поступить примерно так же?

Спасибо! Вот пример кода из моего приложения: открытый класс navfragment extends фрагмент {

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?

1 ответ

Решение

Вы можете добавить обратный вызов из вашего фрагмента в вашу деятельность, чтобы закрыть ящик.

Ex.

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
   }

}

Очевидно, вы можете назвать этот интерфейс чем-то, что более точно соответствует вашим потребностям, и передать ему любые аргументы, которые вам нужны

Другие вопросы по тегам