繁体   English   中英

返回按碎片

[英]Back Press on fragments

我在应用程序中使用滑动菜单,并从MainActivity启动片段,我想在按下后退按钮时关闭应用程序。 在最后一个片段中按下后退按钮时,它会打开活动,但是在最后一个片段中按下后退按钮时,我想退出该应用程序。 我怎样才能做到这一点。

这是我创造的

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor("#0057b3")));

    setContentView(R.layout.activity_main);
    graphicUtil = new GraphicsUtil();

    mTitle = mDrawerTitle = getTitle();
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
    navMenuIcons = getResources()
            .obtainTypedArray(R.array.nav_drawer_icons);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

    navDrawerItems = new ArrayList<NavDrawerItem>();
    // My Feeds
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
            .getResourceId(0, -1)));
    // Private Feeds
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons
            .getResourceId(1, -1)));
    // My Profile
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons
            .getResourceId(2, -1)));
    // People and Groups
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons
            .getResourceId(3, -1)));
    // Messages
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons
            .getResourceId(4, -1)));
    // Favorites
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons
            .getResourceId(5, -1)));
    // Credits
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons
            .getResourceId(6, -1)));
    // Settings
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[7], navMenuIcons
            .getResourceId(7, -1)));
    // About this app
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[8], navMenuIcons
            .getResourceId(8, -1)));
    // Contact us
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[9], navMenuIcons
            .getResourceId(9, -1)));
    // Log Out
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[10], navMenuIcons
            .getResourceId(10, -1)));

    navMenuIcons.recycle();

    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

    adapter = new NavDrawerListAdapter(getApplicationContext(),
            navDrawerItems);
    mDrawerList.setAdapter(adapter);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.app_name, R.string.app_name) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);


    // open default fragment

    if (savedInstanceState == null) {
        displayView(0);
    }
}

这是我的显示视图方法,可打开片段

private void displayView(int position) {
    switch (position) {
    case 0:
        // fragment = new MyPublicPostsFragment();
        fragment = new MyFeedsFragment();
        break;
    case 1:
        fragment = new MyPrivatePostsFragment();
        break;
    case 2:
        fragment = new MyProfileFragment();
        break;
    case 3:
        fragment = new PeopleFragment();
        break;
    case 4:
        fragment = new MessagesFragment();
        break;
    case 5:
        fragment = new FavouritesFragment();
        break;
    case 6:
        fragment = new CreditsFragment();
        break;
    case 7:
        fragment = new SettingsFragment();
        break;
    case 8:
        fragment = new AboutThisAppFragment();
        break;
    case 9:
        fragment = new ContactUsFragment();
        break;
    case 10:
        fragment = new LogOutFragment();
        store.setLoginStatus(null);
        break;
    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment)
                .addToBackStack(null).commit();

        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);

    } else {
        Log.e("Main Activity", "error in creating fragment");
    }}

任何帮助将不胜感激

提前感谢

将以下代码放入您的MainActivity()。java中

    @Override
public void onBackPressed()
{
    // Do Here what ever you want do on back press;
    finish();
}

有几种方法可以做到这一点(比其他方法更好):

  • 方式1:使用TAG字符串执行片段事务。 这样,您可以在MainActivity的onBackPressed()使用findFragmentByTag检查当前片段是什么,如果要退出的片段是,然后退出,如果不执行任何操作。

  • 方式2:当displayView方法使用开关时,您可以在MainActivity中存储整数位置,在onBackPressed()您可以检查整数是什么,因此可以知道什么是片段。

  • 方式3:您还可以创建一个名为mCurrentFragment的变量来存储当前片段,在onBackPressed()您可以使用instanceOf检查什么是片段,并应用相同的逻辑。

  • 方式4:您可以创建片段必须实现的侦听器,并在调用onBackPressed ,然后调用该侦听器并执行所需的任何操作。

如果您需要代码示例,请告诉我,我会很乐意添加。

编辑1:

请记住,这是伪代码,它可能包含任何错字或其他内容,请使用编译器进行正确检查。

在您的MainActivity.java中:

public class MainActivity extends FragmentActivity {

   // Code... 

   private Fragment mCurrentFragment;

   // Code...

   private void displayView(int position) {
      switch (position) {
         case 0:
           mCurrentFragment = new MyFeedsFragment();
           break;
         // Substitute fragment for mCurrentFragment in the rest of the method...
   }

  @Override
  public void onBackPressed() {
      if (mCurrentFragment instanceof LogOutFragment) {
        finish();
      } else {
         // Do whatever you want to do if necessary
      }
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM