在活动中恢复状态后访问Fragment的ArrayList

时间:2017-11-07 08:00:12

标签: android android-fragments arraylist

我正在尝试在某些数据更改时通过父活动更新片段中存在的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);
    }

}

任何解决方案?我在这里做错了什么。

1 个答案:

答案 0 :(得分:-4)

尝试使用生命周期方法:

  

的onPause()

当用户在调用OnPause()时收到诸如呼叫或短信之类的事件时,会调用

onPause(),可能会部分或完全隐藏活动。

您可能希望在onPause()中保存用户数据,以防他点击后退按钮而不明确保存数据。

  

的onResume()

当用户恢复他之前离开的Activity时,会调用

OnResume(),比如他按下主页按钮然后返回应用程序,onResume()被调用。

您可以在onResume()

中执行此处或此类网络相关更新
  

onStop()

Android活动生命周期中的

onStop()方法当活动在后台时,将执行onPause()方法。 在该方法的毫秒之后,将执行下一个onStop()方法。 这意味着当onStop()执行时,用户看不到活动。 我们将使用onStop()方法停止Api调用等。此onStop()方法将清除您的所有活动资源。