我正在为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);
所以我真的以为我不会“保存”我应该做的一切,也许我应该把除了用户插入的数据以外的东西放在捆绑中?