0

私はアンドロイド用の簡単なアプリケーションを書いていますが、本当に初心者です。

私がやろうとしているHashMap<String, ArrayList<CustomObject>>のは、カスタムオブジェクトを作成してそれらをに保存することです.それは機能していますが、ランドスケープモードにすると、それ以降に保存したものはすべて明らかに「忘れられます」. これを解決するために、メイン アクティビティのメソッドをオーバーライドしようとしていますonSavedInstanceState()(タブ レイアウトを設定するために 3 つのフラグメントを作成します)。

これは私の実装です:

@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ようです。問題は、縦向きモードに戻った後、何も機能していないことです。つまり、ボタンをクリックするとクラッシュするなど..

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);

だから私は、私がすべきことすべてを「保存」しているのではなく、ユーザーが挿入したデータ以外のものをバンドルに入れるべきだと本当に思っていますか?

4

0 に答える 0