【问题标题】:How do I use the parameter defined in another class?如何使用另一个类中定义的参数?
【发布时间】:2013-11-21 07:49:25
【问题描述】:

我在定义为

的主要活动中使用导航抽屉
private DrawerLayout drawerlayout;

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

谢谢! 这是我的应用程序中的示例代码: 公共类 navfragment 扩展片段 {

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?

【问题讨论】:

  • 展示一些代码如何从 Fragment 访问 Drawer。
  • 你需要从fragment回调activity并访问那里的drawerLayout
  • 添加了代码,各位大佬看看有什么线索吗?

标签: android android-layout android-fragments android-navigation


【解决方案1】:

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

例如

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
   }

}

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

【讨论】:

  • 我添加了包括您建议中的代码在内的代码,但它仍然崩溃,您可以检查一下并让我知道我做错了什么吗?谢谢!
  • @JusticeBauer 您实际上并没有在类声明中包含“实现”部分。在您的活动中的“实现 OnBackStackChangedListener”之后添加“, OnCloseDrawerListener”。
  • 你先生,真是个天才,谢谢! +25 给你。另外,您是否对这个问题有任何想法:stackoverflow.com/questions/20058491/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2021-05-21
  • 1970-01-01
  • 2015-11-05
  • 2018-01-28
  • 1970-01-01
  • 2018-04-26
相关资源
最近更新 更多