2017-04-20 5 views
1

デバイスを回転させるときにEditTextの値を保存しようとしています。 Firebaseデータベースを使用して、値を保存して取得しています。EditResume()を保存します。

@Override 
protected void onStart() { 
    super.onStart(); 


    ValueEventListener postListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Post post = dataSnapshot.getValue(Post.class); 
      if (mPostKey != null) { 
       titleEditText.setText(post.getTitle()); 
       notesEditText.setText(post.getNotes()); 
      } else { 
       titleEditText.setText(prefs.getString("titleText", post.getTitle())); 
       notesEditText.setText(prefs.getString("notesText", post.getTitle())); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }; 
    mPostReference.addValueEventListener(postListener); 
    mPostListener = postListener; 
} 

これは、値がすでにfirebaseに格納されていない場合にのみ機能します。

@Override 
protected void onResume() { 
    super.onResume(); 
    prefs.edit().putString("titleText", titleEditText.getText().toString()).commit(); 
    prefs.edit().putString("notesText", notesEditText.getText().toString()).commit(); 

} 

私はマニフェストの向きの変更を設定できましたが、私がそれを行うと、アクティビティに写真を追加すると、まだテキストが失われています。

また、私は前にこのようなsuper.onResume()の後にリスナーを削除しようとしています

@Override 
public void onResume() { 
    super.onResume(); 
    if (mPostListener != null) { 
     mPostReference.removeEventListener(mPostListener); 
    } 

} 

すべてのヘルプはapreciatedされます。

+0

を行いますが、成功しませんように、それはそれを保存することはありませんので、

// This function will invoked when rotation detected @Override public void onSaveInstanceState(Bundle outState) { outState.putString("titleText", titleEditText.getText().toString()); outState.putString("notesText", notesEditText.getText().toString()); super.onSaveInstanceState(outState); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // this will restore it if (savedInstanceState != null) { titleEditText.setText(savedInstanceState.getString("titleText")); notesEditText.setText(savedInstanceState.getString("notesText")); } } 

私はこれより良いと思います。 – r3dm4n

答えて

0

は、あなたが、私はそれが動作するようになってきました。このオーバーライド機能

public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     if (newConfig.orientation== Configuration.ORIENTATION_PORTRAIT) 
     { 

     } 
     else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
     { 

     } 
    } 
0

に使用してみました。より良い答えがあれば、それを私と共有してください。

@Override 
protected void onStart() { 
    super.onStart(); 

    mPostReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Post post = dataSnapshot.getValue(Post.class); 
      if (mPostKey != null) { 
       titleEditText.setText(post.getTitle() + prefs.getString("titleText", post.getTitle())); 
       notesEditText.setText(post.getNotes() + prefs.getString("notesText", post.getTitle())); 
      } else { 
       titleEditText.setText(prefs.getString("titleText", post.getTitle())); 
       notesEditText.setText(prefs.getString("notesText", post.getTitle())); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

とonResume

@Override 
protected void onResume() { 
    super.onResume(); 
    prefs.edit().putString("titleText", titleEditText.getText().toString()).apply(); 
    prefs.edit().putString("notesText", notesEditText.getText().toString()).apply(); 

} 

EDIT

で、私は、テキストの前で編集する場合、このメソッドは正しくテキストを設定しません。

0

この目的では、savedInstaceState()を使用すると便利です。例:SharedPreferencesは私もこれをやってみましたので、あなたは、私の例をあげてくださいすることができ

+0

これは、データベースが空の場合にのみ機能します。そうでなければ、firebaseの値で上書きします。助言がありますか ? – r3dm4n

関連する問題