У меня проблема с сохранением и извлечением значений в одноэлементном классе только в android oreo. У меня есть активность с 4 фрагментами. 1-й фрагмент показывает список продуктов. Каждый раз, когда пользователь выбирает этот продукт, я сохраняю этот продукт в переменной класса singleton. Теперь, когда Я пытаюсь получить это значение во втором фрагменте, он показывает исключение нулевого указателя. Я сохраняю значение в onStop () и получаю значение в onResume (). Ниже приведен метод onStop для fragmentProduct, в котором я сохраняю порядок в orderList.
Фрагмент продукта
public void onStop()
{
super.onStop();
Log.d("stop","called");
globalProvider.shangpingListDefault.clear();
if (MiTems!=null) {
for(int i=0;i<MiTems.size();i++){
for(int a=0;a<MiTems.get(i).size();a++){
globalProvider.shangpingListDefault.add(MiTems.get(i).get(a));
}
}
}
List<OrderSubmit> orderList=new ArrayList<OrderSubmit>();
this.shangPingList=globalProvider.shangpingList;
List<Contract> contractList=globalProvider.contractListToCart;
for (int i = 0; i < globalProvider.contractListToCart.size(); i++) {
//globalProvider.orders.add(new OrderSubmit());
OrderSubmit order = new OrderSubmit();
order.products = new ArrayList<Product>();
//Contract contract=globalProvider.contractListToCart.get(i);
for (int a = 0; a < globalProvider.shangpingList.size(); a++) {
Product product = globalProvider.shangpingList.get(a);
if (globalProvider.contractListToCart.get(i)._supplier.equals(product.get_supplier())) {
order.products.add(product);
}
}
orderList.add(order);
Log.d("orderlist","orderadded");
}
Ниже приведен метод OnResumeMethod FragmentCart, где я получаю порядок в onResume
FragmentCart
public void onResume()
{
super.onResume();
orders=globalProvider.orders;
Log.d("checksizeorder",globalProvider.orders.size()+"");
setSelect();
}
В MainActivity при выборе вкладки я заменяю этот фрагмент: Основная деятельность
public void setSelect(int i){
FragmentManager fm=getFragmentManager();
FragmentTransaction transaction=fm.beginTransaction();
//hide(transaction);
switch(i){
case 0:
if (globalProvider.singal==0){
return;
}
globalProvider.singal=0;
FragmentContract fragment_contract = new FragmentContract();
transaction.replace(R.id.main, fragment_contract);
shangping_Img.setImageResource(R.drawable.shangping_pressed);
cart_Img.setImageResource(R.drawable.cart);
dingdan_Img.setImageResource(R.drawable.dingdan);
wode_Img.setImageResource(R.drawable.my_info);
one.setTextColor(0xffee2400);
two.setTextColor(0xff666666);
three.setTextColor(0xff666666);
four.setTextColor(0xff666666);
break;
case 1:
if (globalProvider.singal==1){
return;
}
globalProvider.singal=1;
FragmentCart cart_fragment=new FragmentCart();
transaction.replace(R.id.main, cart_fragment);
shangping_Img.setImageResource(R.drawable.shangping);
cart_Img.setImageResource(R.drawable.cart_pressed);
dingdan_Img.setImageResource(R.drawable.dingdan);
wode_Img.setImageResource(R.drawable.my_info);
one.setTextColor(0xff666666);
two.setTextColor(0xffee2400);
three.setTextColor(0xff666666);
four.setTextColor(0xff666666);
break;
@MoGa: Обновлено. Смотрите, мой метод onStop вызывается всякий раз, когда я перехожу к другому фрагменту, как я проверял с помощью регистратора.
onPause является аналогом onResume - другими словами, вы можете перейти к onResume без onStop.
@Andy Я тоже пытался сохранить значение в onPause. Это не сработало
Я понял, что метод onResume нового фрагмента вызывается до onStop
Даже onPause вызывается перед onResume нового фрагмента. Пожалуйста, помогите!
Есть некоторая проблема с фрагментом в версии oreo. Я создал отдельное приложение, чтобы проверить, какие функции жизненного цикла вызываются, когда мы заменяем один фрагмент другим ... Вот журнал:
MainActivity onCreate ->
FragmentA oncreate ->
FragmentA oncreateView ->
MainActivity onStart ->
FragmentA onStart ->
MainActivity onResume ->
FragmentA onResume ->
Button Pressed;that replace fragment A with Fragment B
FragmentB oncreate ->
FragmentB onCreateVew ->
FragmentB onStart ->
FragmentB onResume ->
FragmentA onPause ->
FragmentA onStop ->
FragmentA onDestroy ->
Я импортировал import android.app.Fragment. Он работал, когда я заменил его на android.support.v4.app.Fragment.
Это поможет, если вы разместите какой-нибудь код. Небольшое примечание: onStop для фрагмента не будет вызываться, если вы показываете другой фрагмент, если только вы его не уничтожаете. Вы можете подумать о сохранении значения, когда фрагмент станет невидимым.