Фрагмент OnResume() после OnPause()

У меня есть приложение, частью которого является фрагмент, в котором камера делает снимок, когда делается снимок, загружается другой фрагмент для отображения изображения. Затем у пользователя есть возможность переснять снимок, если он не доволен. Это должно вернуться к предыдущему фрагменту (камере), и это происходит, когда отображается наложение, однако ранее снятое изображение все еще отображается.

РЕДАКТИРОВАТЬ * * Я отлаживал его, и когда изображение снимается и загружается следующий фрагмент, onpause() не вызывается, поэтому, когда пользователь нажимает повторный снимок, onresume не вызывается, что восстанавливает мою камеру. Я знаю, что здесь были похожие вопросы, но я не могу найти ответ на свою проблему.**EDIT

Следует сказать, что я интегрирую здесь чужую работу, и это вызывает путаницу. Вот два метода перехода к следующему фрагменту и переходу к предыдущему фрагменту.

ДАЛЕЕ

public void gotoNextFragment(String nextTag, Fragment nextFragment){

    FragmentManager  fm = getSupportFragmentManager();

    FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.animator.enter_slide_in, R.animator.enter_slide_out);

    boolean newlyCreated = false;
    if(nextFragment == null){
        nextFragment = Fragment.instantiate(this, nextTag);
        newlyCreated = true;
    }

    //hide current fragment
    ft.hide(fm.findFragmentByTag(Misc.currentContentFragmentTag));

    if(newlyCreated){
        ft.add(R.id.content_frame, nextFragment, nextTag);
    }
    else{
        ft.show(nextFragment);
    }
    ft.addToBackStack(null);
    ft.commit();
    Misc.currentContentFragmentTag = nextTag;

}

ПРЕДЫДУЩИЙ

public void gobackToPreviousFragment(String preFragmentTag,Fragment f){

    FragmentManager  fm = getSupportFragmentManager();

    FragmentTransaction ft = fm.beginTransaction();
    ft.setCustomAnimations(R.animator.close_slide_in,R.animator.close_slide_out);

    ft.show(f);
    ft.remove(fm.findFragmentByTag(Misc.currentContentFragmentTag));                    
    ft.addToBackStack(null);
    ft.commit();

    Misc.currentContentFragmentTag = preFragmentTag;

}

Если бы у кого-нибудь было какое-либо представление о том, что мне нужно сделать, чтобы обеспечить вызов onResume(), я был бы признателен...

РЕДАКТИРОВАТЬ Предварительный просмотр изображения, который по-прежнему отображается, является стандартным предварительным просмотром изображения камеры, а не фрагментом для предварительного просмотра


person DJ-DOO    schedule 08.08.2013    source источник


Ответы (2)


Когда вы hide() show() фрагментируете, вы не получаете вызов onResume(). Тогда вы получите вызов только при первом создании фрагмента.

person Warpzit    schedule 08.08.2013
comment
хорошо, так что, если я спрячусь, я тоже не получу вызов onPause? Есть ли способ обойти это? или вам нужно заменить фрагмент, чтобы вызвать onPause() и, в свою очередь, onResume()? - person DJ-DOO; 08.08.2013
comment
почему я не подумал об этом...слишком долго смотрел!! поэтому, чтобы скрыть, просто вызовите onPause и то же самое для шоу .. (onResume)? - person DJ-DOO; 08.08.2013
comment
@ DJ-DOO Нет, не совсем. Что бы вы ни хотели сделать в onPause(), я бы перешел к новому методу и вызвал его. То же самое касается onResume(). - person Warpzit; 08.08.2013
comment
ах, спасибо, это хорошо знать. думал, что скрытие/показ связано с жизненным циклом. - person bofredo; 08.08.2013
comment
@bofredo Я тоже, но думаю, это тоже преимущество. Вы можете получить мгновенный ответ от фрагментов, которые скрыты. Вам не нужно создавать все, чтобы показать их снова. - person Warpzit; 08.08.2013

метод onResume() всегда вызывается перед запуском фрагмента. проверьте диаграмму жизненного цикла --> http://docs.xamarin.com/static/guides/android/platform_features/fragments/part_1_-_creating_a_fragment/Images/fragment_lifecycle.png

person bofredo    schedule 08.08.2013
comment
Я это понимаю, я отлаживал свой код и изучал его. Однако не следует ли также вызывать onResume(), когда фрагмент или активность повторно активируются после вызова onPause? - person DJ-DOO; 08.08.2013
comment
да должно. попробуйте переопределить метод onResume() и добавьте в него немного Log.i или Toast, чтобы проверить, действительно ли он вызывается, когда должен. По крайней мере, вы получите новую полезную информацию по вашей проблеме! - person bofredo; 08.08.2013
comment
это не так, я знаю это, потому что у меня были точки останова в резюме, теперь я добавил тост, чтобы быть уверенным, и я точно знаю, что это не так, но я все еще не знаю, почему - person DJ-DOO; 08.08.2013