Я закончил создание базового фрагмента и сделал все фрагменты в моем приложении расширением
public class BaseFragment extends Fragment {
private boolean mStateSaved;
@CallSuper
@Override
public void onSaveInstanceState(Bundle outState) {
mStateSaved = true;
super.onSaveInstanceState(outState);
}
/**
* Version of {@link #show(FragmentManager, String)} that no-ops when an IllegalStateException
* would otherwise occur.
*/
public void showAllowingStateLoss(FragmentManager manager, String tag) {
// API 26 added this convenient method
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (manager.isStateSaved()) {
return;
}
}
if (mStateSaved) {
return;
}
show(manager, tag);
}
}
Тогда, когда я пытаюсь показать фрагмент, я использую showAllowingStateLoss
вместо show
следующим образом:
MyFragment.newInstance()
.showAllowingStateLoss(getFragmentManager(), MY_FRAGMENT.TAG);
Я подошел к этому решению из этого PR: https://github.com/googlesamples/easypermissions/pull/170/files
jQuery's .each()
принимает функцию обратного вызова и применяет ее к каждому элементу в объекте jQuery.
Представьте себе что-то вроде этого:
$('a.ui-icon-cart').click(function(){
$(this).closest('li').clone().appendTo('#cart ul').each(function() {
$(this).find('h5').remove();
$(this).find('img').css({'height':'40px', 'width':'40px'});
$(this).find('li').css({'height':'60px', 'width':'40px'});
});
});
Вы также можете просто сохранить результат и работать с ним вместо этого:
$('a.ui-icon-cart').click(function(){
var $new = $(this).closest('li').clone().appendTo('#cart ul')
$new.find('h5').remove();
$new.find('img').css({'height':'40px', 'width':'40px'});
$new.find('li').css({'height':'60px', 'width':'40px'});
});
Я бы также предложил, чтобы вместо мофирования CSS, как это, вы просто добавили класс к клонированному li, как это:
$(this).closest('li').clone().addClass("new-item").appendTo('#cart ul');
Затем установите некоторые стили, например:
.new-item img, .new-item li { height: 40px; width: 40px; }
.new-item h5 { display: none }
Вы можете просто продолжить цепочку дальнейших операций через точку с запятой.
$(this).closest('li').clone().appendTo('#cart ul').addClass('busy').fade('fast');
и т.д.