2017-04-20 58 views
1

我想在我旋轉設備時保存EditText的值。 我正在使用Firebase數據庫來保存並獲取我的值。保存EditText的值onResume()

@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

能否請您給我一個例子,因爲我已經試過這樣做,以及,但沒有成功。 – 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(); 

} 

編輯

此方法不正確地設置文本,如果我在文中的前編輯。

0

爲此更好地使用savedInstaceState()。例如:

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

    } 
} 

我覺得這個更好,因爲它永遠不會拯救像SharedPreferences確實

+0

僅當數據庫爲空時纔有效。如果不是,則用來自firebase的值覆蓋它。有什麼建議麼 ? – r3dm4n