Android 关于反压的问题

Android 关于反压的问题,android,android-fragments,android-activity,navigation-drawer,onbackpressed,Android,Android Fragments,Android Activity,Navigation Drawer,Onbackpressed,在我的导航抽屉中有5个菜单项。其中一个是关于我们的项目。当我点击这个项目时,我调用AboutUsFragment并显示它(它的内容只是一个文本)。但当我点击BackPress时,fragment消失了,但它的文本仍保留在我的活动中。我如何解决这个问题?它与什么有关 选择“我的活动”中导航抽屉的项目: public void selectItem(int position) { Fragment fragment = null; switch (position) {

在我的导航抽屉中有5个菜单项。其中一个是关于我们的项目。当我点击这个项目时,我调用AboutUsFragment并显示它(它的内容只是一个文本)。但当我点击BackPress时,fragment消失了,但它的文本仍保留在我的活动中。我如何解决这个问题?它与什么有关

选择“我的活动”中导航抽屉的项目:

public void selectItem(int position) {

    Fragment fragment = null;

    switch (position) {
        case 0:
            if (!Constants.login_state) {
                fragment = new LoginFragment();
            } else {
                Logout();
            }
            break;

        case 1:
            Constants.filter = false;
            Constants.gender = "-1";
            fragment = new HomeFragment();
            break;

        case 2:
            Constants.filter = false;
            Constants.gender = "2";
            StyleFragment.SortingMode = 1;
            fragment = new StyleFragment();
            break;

        case 3:
            Constants.filter = false;
            Constants.gender = "1";
            StyleFragment.SortingMode = 1;
            fragment = new StyleFragment();
            break;

        case 4:
            fragment = new AboutUsFragment();
            break;

        default:
            break;
    }

    if (fragment != null) {
        FragmentTransaction fragmentManager = getSupportFragmentManager().beginTransaction();
        fragmentManager.replace(R.id.rl_container, fragment);
        fragmentManager.addToBackStack(null);
        fragmentManager.commit();
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(mNavigationDrawerItemTitles[position]);
        mDrawerLayout.closeDrawer(Gravity.END);
    } else {
        Log.e("HomeActivity", "Error in creating fragment");
    }
}
@Override
public void onBackPressed() {

    if (SearchOpened) {
        lv_searchResult.setVisibility(View.GONE);
        SearchOpened = false;
    } else
        super.onBackPressed();
}
关于碎片:

public class AboutUsFragment extends android.support.v4.app.Fragment{

private View view;
private TextView about_us_fragment_text_view;

public static AboutUsFragment newInstance() {
    AboutUsFragment fragment = new AboutUsFragment();
    Bundle args = new Bundle();
    fragment.setArguments(args);
    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view=inflater.inflate(R.layout.fragment_about_us, container, false);
    Casting(view);
    about_us_fragment_text_view.setText(getResources().getString(R.string.about_us));
    ChangeUIFont.ChangeFont((ViewGroup) view, getContext());

    return view;
}


//casting parameters
public void Casting(View v){
    about_us_fragment_text_view= (TextView) v.findViewById(R.id.about_us_fragment_text_view);
}}
在我的活动中按onBackPress:

public void selectItem(int position) {

    Fragment fragment = null;

    switch (position) {
        case 0:
            if (!Constants.login_state) {
                fragment = new LoginFragment();
            } else {
                Logout();
            }
            break;

        case 1:
            Constants.filter = false;
            Constants.gender = "-1";
            fragment = new HomeFragment();
            break;

        case 2:
            Constants.filter = false;
            Constants.gender = "2";
            StyleFragment.SortingMode = 1;
            fragment = new StyleFragment();
            break;

        case 3:
            Constants.filter = false;
            Constants.gender = "1";
            StyleFragment.SortingMode = 1;
            fragment = new StyleFragment();
            break;

        case 4:
            fragment = new AboutUsFragment();
            break;

        default:
            break;
    }

    if (fragment != null) {
        FragmentTransaction fragmentManager = getSupportFragmentManager().beginTransaction();
        fragmentManager.replace(R.id.rl_container, fragment);
        fragmentManager.addToBackStack(null);
        fragmentManager.commit();
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(mNavigationDrawerItemTitles[position]);
        mDrawerLayout.closeDrawer(Gravity.END);
    } else {
        Log.e("HomeActivity", "Error in creating fragment");
    }
}
@Override
public void onBackPressed() {

    if (SearchOpened) {
        lv_searchResult.setVisibility(View.GONE);
        SearchOpened = false;
    } else
        super.onBackPressed();
}
---------------------------------------后研究-------------------------------------------

我终于找到了解决办法

在我的片段中,我添加了以下代码:

public static final String FRAGMENT_NAME = AboutUsFragment.class.getName();
在我的活动中,我在调用fragment时设置了它的标记,而不是null

fragmentManager.replace(R.id.rl_container, fragment,fragmentName);
试试这个:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() == 0) {
        super.onBackPressed();
    } else {
      getFragmentManager().popBackStack();
    }
试试这个:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() == 0) {
        super.onBackPressed();
    } else {
      getFragmentManager().popBackStack();
    }

使用此方法而不是OnBackpress

如果你有工具栏,这是我的解决方案, 在工具栏下方的oncreate方法下键入

    assert getSupportActionBar() != null;
  //  getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

并在片段的清单文件中设置此代码

    <activity android:name=".yourCurrentFragment">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".whichActivityYouWantToGo" />
    </activity>

使用此方法而不是按OnBackpress

如果你有工具栏,这是我的解决方案, 在工具栏下方的oncreate方法下键入

    assert getSupportActionBar() != null;
  //  getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

并在片段的清单文件中设置此代码

    <activity android:name=".yourCurrentFragment">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".whichActivityYouWantToGo" />
    </activity>


请发布您的代码有时会出现!不是所有的时间!也在活动和片段中发布你的
onBackPressed
代码,但我应该说我没有像你在我的代码中看到的那样在AboutUsFragment中定义onBackPress!只需在反压时销毁碎片,使用finish();请张贴您的代码有时它发生!不是所有的时间!也在活动和片段中发布你的
onBackPressed
代码,但我应该说我没有像你在我的代码中看到的那样在AboutUsFragment中定义onBackPress!只需在反压时销毁碎片,使用finish();你能解释一下吗?我对它的原因感到困惑!!bcz on onBackPress事件只退出当前活动,而不退出其实例,这就是为什么屏幕上会显示您的文本,如果您仍想在其中使用onBackPress,请在其中使用finish()。您能解释一下吗?我对它的原因感到困惑!!bcz on onBackPress事件只退出当前活动,而不退出其实例,这就是为什么屏幕上会显示您的文本,如果您仍要在onBackPress上使用,请在其中使用finish()。