简体   繁体   English

返回按碎片

[英]Back Press on fragments

I am using sliding menu in my app and starts fragments from MainActivity i want to close application when back button is pressed. 我在应用程序中使用滑动菜单,并从MainActivity启动片段,我想在按下后退按钮时关闭应用程序。 what it is doing that it opens the activity when back button is pressed in last fragment but i want to exit the app when back button is pressed in last fragment. 在最后一个片段中按下后退按钮时,它会打开活动,但是在最后一个片段中按下后退按钮时,我想退出该应用程序。 how can i do this. 我怎样才能做到这一点。

this is my on create 这是我创造的

@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);
    }
}

this my display view method that opens the fragments 这是我的显示视图方法,可打开片段

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");
    }}

any help would be greatly appreciated 任何帮助将不胜感激

Thanx in advance 提前感谢

Put the following code in your MainActivity().java 将以下代码放入您的MainActivity()。java中

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

There are several ways of doing this (some betters than others): 有几种方法可以做到这一点(比其他方法更好):

  • Way 1: Perform a fragment transaction with a TAG string. 方式1:使用TAG字符串执行片段事务。 That way in onBackPressed() on the MainActivity you can check with findFragmentByTag what the current fragment is, if is the fragment you want to exit, then exit, if not do nothing. 这样,您可以在MainActivity的onBackPressed()使用findFragmentByTag检查当前片段是什么,如果要退出的片段是,然后退出,如果不执行任何操作。

  • Way 2: As your displayView method is using a switch you can store the integer position in your MainActivity, that way in onBackPressed() you can check what integer is, and therefore you can know what fragment is. 方式2:当displayView方法使用开关时,您可以在MainActivity中存储整数位置,在onBackPressed()您可以检查整数是什么,因此可以知道什么是片段。

  • Way 3: You can also create a variable called mCurrentFragment to store the current fragment, in onBackPressed() you can check with instanceOf what fragment is, and apply the same logic. 方式3:您还可以创建一个名为mCurrentFragment的变量来存储当前片段,在onBackPressed()您可以使用instanceOf检查什么是片段,并应用相同的逻辑。

  • Way 4: You can create a listener that the fragments must implement and when calling onBackPressed , then call the listener and do whatever you need to do. 方式4:您可以创建片段必须实现的侦听器,并在调用onBackPressed ,然后调用该侦听器并执行所需的任何操作。

If you need code examples tell me and I'll add it gladly. 如果您需要代码示例,请告诉我,我会很乐意添加。

EDIT 1: 编辑1:

Keep in mind that this is pseudocode, it may contain any typo or something, check it properly with the compiler. 请记住,这是伪代码,它可能包含任何错字或其他内容,请使用编译器进行正确检查。

In your MainActivity.java: 在您的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.

相关问题 android中的背压碎片问题 - Back press fragments issue in android 在 Android 中使用片段时处理回按 - Handling back press when using fragments in Android 如何处理片段和活动中的后推 - how to handle back press in fragments and activity 当我按回来时导航片段的问题 - Problem with navigating fragments when i press on back 如何处理 android 片段中的后退按钮按下 - How to handle Back Button press in android fragments 在背面按下,返回到具有Fragments的RecyclerView会导致IllegalArgumentException - On back press, coming back to RecyclerView having Fragments causes IllegalArgumentException 在嵌套片段的BackStack中,按Back键时,Actionbar是否没有更新? - Actionbar doesnt get updated on Back press in BackStack of Nested Fragments? 无法在Android片段中按回操作栏标题 - Not able to set action bar title on back press in Android fragments Android 双回按关闭有碎片的应用 - Android Double Back Press to close the app having fragments 向后按下时碎片会被破坏。 我希望它在后退时不会被破坏,这样我就可以保存片段的状态 - Fragments are getting destroyed when back pressed. I want it to be not destroy when back press so that I can save the states of fragments
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM