簡體   English   中英

重新打開應用程序時如何保留EditText值?

[英]How to retain EditText value on reopening of app?

我正在創建一個具有3個EditTexts的android應用程序。 現在,當我關閉應用程序並返回它時,EditText中的值消失了,我必須返回上一次輸入的值。

如何返回用戶在EditText中輸入的那些值(按一下按鈕),以使用戶不必在關閉和響應應用程序時一次又一次輸入整個文本?

提供代碼答案將有很大幫助! 謝謝。

將此類放在您的項目中

public class SaveData {

private static final String EDIT1 = "edit1";
private static final String EDIT2 = "edit2";
private static final String EDIT3 = "edit3";
SharedPreferences pref;
Editor editor;
Context mContext;
// Shared pref mode
int PRIVATE_MODE = 0;

public SaveData(Context context) {
    this.mContext = context;

    // Sharedpref file name
    final String PREF_NAME = mContext.getString(R.string.app_name) + "_pref";
    pref = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
    editor = pref.edit();
}

public String getEditText1() {
    return pref.getString(EDIT1, "");
}

public void setEditText1(String text)  {
    editor.putString(EDIT1, text);
    editor.commit();
}

public String getEditText2() {
    return pref.getString(EDIT2, "");
}

public void setEditText2(String text){
    editor.putString(EDIT2, text);
    editor.commit();
}

public String getEditText3() {
    return pref.getString(EDIT3, "");
}

public void setEditText3(String text) {
    editor.putString(EDIT3, text);
    editor.commit();
}
}

現在在onCreate上

SaveData saveData = new SaveData(this);
mEditText1.setText(saveData.getEditText1());
mEditText2.setText(saveData.getEditText2());
mEditText3.setText(saveData.getEditText3());

而在onPause

SaveData saveData = new SaveData(this);
saveData.setEditText1(mEditText1.getText()+"");
saveData.setEditText2(mEditText2.getText()+"");
saveData.setEditText3(mEditText3.getText()+"");

有幾種方法可以存儲這種類型的數據,我個人將使用數據庫表,尤其是當您准備好將數據庫作為應用程序的一部分時。 如果不考慮寫入和讀取字符串數組來讀取和讀取。

如果您正在查看數據庫選項,請執行以下操作

// on create
String createTable = "CREATE TABLE texts (id INT NOT NULL,words TEXT)";
SQLiteDatabase db =  MyDatabaseHelper.getDB(); // <- use the method you use to get a db.
db.exec(createTable);
db.close();


 // on start up of your edit text activity

 // create array of edit texts which you have initialized via their ids, it must be a member variable
 EditText[] editTexts = new EditText[]{editText1,editText2,editText3};

 SQLiteDatabase db;
 String sql= "SELECT * from texts";
 Cursor c = db.rawQuery(sql,null);
 if(null !=c && c.moveToFirst())
 {
      for(int i = 0;  i<c.getCount();  i++)
      {
          // get data from db
          String text = c.getString(1);
          int id = c.getInt(0);
          editTexts[id].setText(text);
      }
 }



// to be called at the end of the activity or when then edit texts change
private void saveToDb(){
    SQLiteDataBase db; // got from your sqlite helper method

    for(int i =0; i<editTexts.length; i++)
    {
        // check for insert
        String check = "SELECT *  FROM texts WHERE id ="+i;
        String ins;
        Cursor c = db.rawQuery(check,null);
        if(null != c && c.moveToFirst()){
        // update
           ins= "UPDATE texts SET words = '"+editTexts[i].getText().toString+"' WHERE id = "+i+";";
        }else{
        // insert
           ins = "INSERT into texts (id,words) VALUES("+i+",'"+editTexts[i].getText().toString+"');";
        }
        db.exec(ins);
        db.close();
    }
}

我編寫此代碼時並未對其進行測試,只是作為指導方針,我之前多次使用此模式,並且效果很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM