我正在尝试在某些数据更改时通过父活动更新片段中存在的arraylist。在正常情况下,运作良好。但是当活动处于后台且系统将其杀死时,则在活动状态和片段恢复之后,从活动访问arraylist将返回null 。 / p>
我已添加check以使用onActivityCreated
方法恢复片段内的arraylist,这确实会恢复数组但是,当通过父活动访问时,数组为null。
public class ParentActivity extends AppCompatActivity{
// initialized during onCreate
Fragment fragment;
.
.
.
private void updateFragmentArray(){
.
.
.
fragment.putArrayItem(myItem);
}
}
片段类
public class MyFragment extends Fragment{
// initialized in #onActivityCreated(@Nullable Bundle savedInstanceState)
private ArrayList<MyItem> itemArrayList;
.
.
.
public void putArrayItem(MyItem myItem) {
// THIS LINE THROWS NULL POINTER EXCEPTION
// FOR ARRAYLIST
this.itemArrayList.add(myItem);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState!=null){
this.itemArrayList= (ArrayList<MyItem>) savedInstanceState.getSerializable(GRID_ITEMS);
}
else {
this.itemArrayList= new ArrayList<>();
}
adapter = new RewardsGridFragmentRecyclerViewAdapter(getContext(), this.itemArrayList);
recyclerViewGrid.setAdapter(adapter);
}
}
任何解决方案?我在这里做错了什么。
答案 0 :(得分:-4)
尝试使用生命周期方法:
当用户在调用的onPause()
OnPause()
时收到诸如呼叫或短信之类的事件时,会调用 onPause()
,可能会部分或完全隐藏活动。
您可能希望在onPause()
中保存用户数据,以防他点击后退按钮而不明确保存数据。
当用户恢复他之前离开的Activity时,会调用的onResume()
OnResume()
,比如他按下主页按钮然后返回应用程序,onResume()
被调用。
您可以在onResume()
。
Android活动生命周期中的onStop()
onStop()
方法当活动在后台时,将执行onPause()
方法。
在该方法的毫秒之后,将执行下一个onStop()
方法。
这意味着当onStop()
执行时,用户看不到活动。
我们将使用onStop()
方法停止Api调用等。此onStop()
方法将清除您的所有活动资源。