我遇到的问题是只在android oreo中保存和检索singleton类中的值。我有一个活动有4个片段.1片段显示productlist。每当用户选择该产品时,我将该产品保存在singleton类变量中。现在我尝试在第二个片段中检索此值。它显示空指针异常。 我在onStop()中存储值并在onResume()中检索值。 下面是fragmentProduct的onStop方法,我在orderList中存储顺序
FragmentProduct
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");
}
下面是FragmentCart的OnResumeMethod,我在onResume中检索订单
FragmentCart
public void onResume()
{
super.onResume();
orders=globalProvider.orders;
Log.d("checksizeorder",globalProvider.orders.size()+"");
setSelect();
}
在MainActivity中,只要选择了tab,我就会替换这些片段: 的 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;
答案 0 :(得分:0)
在oreo版本中存在Fragment的一些问题。我创建了一个单独的应用程序来检查当我们用其他片段替换一个片段时调用的生命周期函数。这是日志:
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 ->
我正在导入导入android.app.Fragment。当我用android.support.v4.app.Fragment替换它时,它工作。