【问题标题】:How to Implement on backpress method in Navigation drawer android?如何在导航抽屉android中实现backpress方法?
【发布时间】:2014-03-11 07:21:01
【问题描述】:

我使用SherlockFragment 创建了抽屉式导航。抽屉里有两件物品-

  1. 片段1
  2. 片段2

我想实现如下,如果用户在 Fragment2 上按下返回按钮,那么他/她应该被重定向到 fragment1。

    public class Drawer extends SherlockFragmentActivity {
DrawerLayout mDrawerLayout;
ListView mDrawerList;
ActionBarDrawerToggle mDrawerToggle;
MenuListAdapter mMenuAdapter;
String[] title;
String[] subtitle;
int[] icon;
Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.drawer_main);
    title = new String[] { "Post a Squib", "Edit Profile"};
    icon = new int[] { R.drawable.action_about, R.drawable.action_settings};
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
    GravityCompat.START);
    mMenuAdapter = new MenuListAdapter(this, title, icon);
    mDrawerList.setAdapter(mMenuAdapter);
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            // TODO Auto-generated method stub
            super.onDrawerClosed(view);
        }
        public void onDrawerOpened(View drawerView) {
            // TODO Auto-generated method stub

            super.onDrawerOpened(drawerView);
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        selectItem(0);
    }
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
//  super.onBackPressed();
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
    mDrawerLayout.closeDrawer(mDrawerList);
}else{

    //i want changes in this part
    // currently when user is in second fragment/first fragment and press back button then dialogue box is appeared
    //But I'd like to have such like user press back button in fragment2 it should be redirected to fragment1.

    final Builder builder = new Builder(this);
    builder.setTitle("Attention");
    builder.setMessage("Do you really want to exit?");
    builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
        @Override
        public void onClick(final DialogInterface dialog, final int which) {
                 Drawer.this.finish();
                dialog.dismiss();    
       }
   });
    builder.setNegativeButton(android.R.string.cancel,
            new OnClickListener() {
                @Override
                public void onClick(final DialogInterface dialog,
                        final int which) {
                                              dialog.dismiss();
                }
            });
    final AlertDialog dialog = builder.create();
    dialog.show();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            mDrawerLayout.openDrawer(mDrawerList);
        }
    }
    return super.onOptionsItemSelected(item);
}
// The click listener for ListView in the navigation drawer
private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        selectItem(position);
    }
}
private void selectItem(int position) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    // Locate Position
    switch (position) {
    case 0:
        ft.replace(R.id.content_frame, fragment1);
        break;
    case 1:
        ft.replace(R.id.content_frame, fragment2);
        break;
    }
    ft.commit();
    mDrawerList.setItemChecked(position, true);
    // Close drawer
    mDrawerLayout.closeDrawer(mDrawerList);
}
}

【问题讨论】:

    标签: android android-fragments navigation-drawer


    【解决方案1】:

    我没有研究 sherelock 库,但我做了一点。

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) 
        {
    
        case android.R.id.home:
             // Do whatever you want, e.g. finish()
            finish();
             break;
    
          }
        return true;
    }
    

    }

    希望对你有所帮助。

    如果您想详细了解,可以点击以下链接。

    How to disable back button pressed in android fragment class

    Actionbarsherlock back button and smartphone back button

    Android ActionBarSherlock On Top Icon Back

    【讨论】:

    • 我猜你没有正确理解我的问题!
    • 对不起,你说的是你的片段切换。但这种布局不一样。
    • 我想返回主页片段而不是那个对话框!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2020-07-11
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多