0

我正在为 android 编写一个简单的应用程序,我真的是一个初学者。

我想要做的是创建自定义对象并将它们存储在一个HashMap<String, ArrayList<CustomObject>>并且它正在工作,但是当我进入横向模式时,它显然“忘记”了我从那时起存储的所有内容。为了解决这个问题,我试图覆盖onSavedInstanceState()我的主要活动的方法(在其中我创建了三个片段来填充我的选项卡布局)

这是我的实现:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    myCustomObjectManager.saveInstanceState(savedInstanceState);
    super.onSaveInstanceState(savedInstanceState);
}

myCustomObjectManager 像这样实现 saveInstanceState:

public void saveInstanceState(Bundle savedInstanceState) {
    ArrayList<String> keySet = new ArrayList<String>(myHashmap.keySet());
    //store the keySet
    savedInstanceState.putStringArrayList(SAVED_KEYSET, keySet);
    //retrieve arrayLists and store them
    for (String i : keySet){
        ArrayList<CustomObject> currentList = myHashmap.get(i);
        savedInstanceState.putParcelableArrayList(i, currentList);
    }
}

我像这样恢复这些数据:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null){
        //restore saved values
        myCustomObjectManager.loadInstanceState(savedInstanceState);
    }

public void loadInstanceState(Bundle savedInstanceState) {
    //retrieve stored keySet
    ArrayList<String> keySet = savedInstanceState.getStringArrayList(SAVED_KEYSET);
    //retrieve stored lists and load them on my map
    for (String i : keySet){
        ArrayList<CustomObject> currentList = savedInstanceState.getParcelableArrayList(i);
        myHashMap.put(i, currentList);
    }

}

似乎它正在工作,因为如果我进入横向并返回纵向模式,我的 CustomObjects 仍然显示在我ListView的 中,问题是在我回到纵向模式后没有任何工作了。我的意思是,如果我单击一个按钮,它就会崩溃,等等。

日志猫说“IllegalStateException:无法执行活动的方法”由“MainActivity.onAddClicked 处的 NullPointerException”引起

这是抛出的行NullPointerException

EditText title = (EditText) fragment.getView().findViewById(R.id.new_title);

插入此代码中

//get current fragment
    int index = myViewPager.getCurrentItem();
    Fragment fragment = myTabsPagerAdapter.getFragment(index);

    EditText title = (EditText) fragment.getView().findViewById(R.id.new_title);

所以我真的在想我并没有“保存”我应该“保存”的所有东西,也许我应该把除了用户插入的数据之外的东西放入捆绑包中?

4

0 回答 0