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