IllegalStateException:进入横向模式后无法执行活动的方法

时间:2013-08-22 19:58:37

标签: java android android-viewpager state

我正在为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);
    }

}

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

Log Cat说“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);

所以我真的以为我不会“保存”我应该做的一切,也许我应该把除了用户插入的数据以外的东西放在捆绑中?

0 个答案:

没有答案