проблемы с фрагментом onBackPress

в моем навигационном ящике есть 5 пунктов меню. один из них о нас. когда я нажимаю на этот пункт, я вызываю AboutUsFragment и показываю его (его содержимое - просто текст). его тексты остаются в моей деятельности. как я могу решить эту проблему? с чем это связано?!

выберите элемент навигационного ящика в моей деятельности:

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

и AboutUsFragment:

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 в моей деятельности:

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

и в моей деятельности я устанавливаю тег фрагмента, когда я его вызываю, вместо нуля!

fragmentManager.replace(R.id.rl_container, fragment,fragmentName);

person Zahra.HY    schedule 16.04.2016    source источник
comment
Пожалуйста, опубликуйте свой код   -  person Linh    schedule 16.04.2016
comment
иногда бывает! не все время!   -  person Zahra.HY    schedule 16.04.2016
comment
также опубликуйте свой код onBackPressed в своей деятельности и фрагменте   -  person Linh    schedule 16.04.2016
comment
Но я должен сказать, что не определял onBackPress в AboutUsFragment, как вы видите в моих кодах!   -  person Zahra.HY    schedule 16.04.2016
comment
просто уничтожьте свой фрагмент на OnBackPressed, используйте finish();   -  person Sagar Chavada    schedule 16.04.2016
comment
@Zahra, скажи мне, ты использовал пользовательскую панель инструментов в своем приложении .. если да, то я могу опубликовать здесь хороший ответ для твоего решения   -  person Sagar Chavada    schedule 16.04.2016
comment
@SagarChavada, к сожалению, да, я использовал его.   -  person Zahra.HY    schedule 16.04.2016


Ответы (2)


использовал этот метод вместо onBackPressed

если у вас есть панель инструментов, то вот мое решение, введите метод 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>
person Sagar Chavada    schedule 16.04.2016
comment
Вы можете объяснить об этом? Я запутался в его причине!! - person Zahra.HY; 17.04.2016
comment
bcz в событии onBackPress выходит только из вашей текущей активности, а не из ее экземпляра, поэтому ваш текст отображается на дисплее, если вы все еще хотите использовать onBackPress, используйте в нем finish(). - person Sagar Chavada; 17.04.2016

Попробуй это:

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