【问题标题】:Saving data in edittext when hitting Back button点击后退按钮时将数据保存在edittext中
【发布时间】:2013-09-10 17:01:17
【问题描述】:

所以在活动 1 中,我单击一个按钮,将我带到活动 2。在活动 2 中,我将一些数据输入到 EditText 中。当我点击手机上的后退按钮时,它会将我带到活动 1,这是正确的,但如果我再次点击活动 1 按钮,我输入到 EditText 中的任何文本都消失了。我确信这是因为我每次按下按钮时都会开始一个新的 Intent,我认为我需要使用 Flags,但我不确定。下面是我的基本 MainActivity1 和 MainActivity2,没有我尝试过的代码。

**编辑:退出应用后所有保存的数据都需要删除。

MainActivity1

public class MainActivity extends Activity {

Button b1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    b1 = (Button)findViewById(R.id.button2);
    b1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            Intent i = new Intent(MainActivity.this,MainActivity2.class);
            startActivity(i);


        }
    });
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

MainActivity2

public class MainActivity2 extends Activity {


EditText et1;

@Override
protected void onCreate(Bundle outState) {
    super.onCreate(outState);
    setContentView(R.layout.activity_main_2);

    et1 = (EditText)findViewById(R.id.editText1);

    }
}

}

提前谢谢你。

【问题讨论】:

    标签: android save android-edittext restore


    【解决方案1】:

    试试这个 将这些代码复制到您的 MainActivity2 中,它将保存您的数据(即您的 EditText 数据)

    public class MainActivity2 extends Activity {
    
    
    EditText et1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_2);
    
    et1 = (EditText)findViewById(R.id.editText1);
    loadSavedPreferences(); 
    
    }
    private void loadSavedPreferences() {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    
    et1.setText(sharedPreferences.getString("string_et1",""));
    
    }
    private void savePreferences(String key, String value) {
    SharedPreferences sharedPreferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
    }
    public void saveData(){
    savePreferences("string_et1", et1.getText().toString());
    }
    @Override
    public void onBackPressed(){
        saveData();
    super.onBackPressed();
    }   
    }
    

    如果您想在退出应用时删除首选项,请在 MainActivity1 中尝试此操作。

    public class MainActivity extends Activity {
    
    Button b1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    
    b1 = (Button)findViewById(R.id.button2);
    b1.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
    
            Intent i = new Intent(MainActivity.this,MainActivity2.class);
            startActivity(i);
    
    
        }
    });
    }
    @Override
    public void onBackPressed() {
        clear_pref();
    
    }
    public void clear_pref(){
                SharedPreferences sharedPreferences = PreferenceManager
                    .getDefaultSharedPreferences(this);
                Editor editor = sharedPreferences.edit();
                editor.clear();
                editor.commit();        
    }
    }
    

    【讨论】:

      【解决方案2】:

      您必须将数据保存在onBackPressed() 的某个地方。我建议使用Preferences:

      public class MainActivity2 extends Activity {
      
          EditText et1;
      
          @Override
          protected void onCreate(Bundle outState) {
              super.onCreate(outState);
              setContentView(R.layout.activity_main_2);
      
              et1 = (EditText)findViewById(R.id.editText1);
              SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
              String restoredText = prefs.getString("text", null);
              if(!TextUtils.isEmpty(restoredText)){
                   et1.setText(restoredText);
               }
          }
          @Override
          protected void onBackPressed(){
             SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
             editor.putString("text", et1.getText().toString()); 
             editor.commit();
             super.onBackPressed();
          }
      }
      

      【讨论】:

        【解决方案3】:

        首先,您需要了解,按下活动上的后退按钮意味着它正在被显式销毁,因此操作系统在更改方向时提供的 saveInstanceState 机制不是一个选项,但是您始终可以在android 允许存储值的持久性机制,我建议您将值存储在 SharedPreferences 上,然后在重新启动活动后将其填充回编辑文本...

        希望这会有所帮助。

        问候!

        【讨论】:

        • 我忘了把这个放在原来的问题中,但是当应用程序被主页按钮退出时,需要删除保存的数据。据我了解,SharedPreferences 主要用于一段时间内需要的信息。使用 SharedPreferences 然后在退出应用时删除它们是否仍然可以?
        • 是的,SharedPreferences 应该只用于长期保存数据,即使应用程序关闭或手机关机也是如此,所以如果您正在谈论按 home 可能这种方法不适合您的需求和您应该尝试使用一些本地缓存的对象来解决这个问题...
        【解决方案4】:

        你是对的,这与使用新的Intent有关。

        但是,可以使用 Android 的 Bundle 类在活动之间传递数据。

        也许这个article会更好地解释这个概念和方法。

        【讨论】:

          【解决方案5】:

          编写代码以在 onDestroy 函数的 edittext 中保存文本,您必须覆盖它。 再次创建活动时(在 onCreate 方法中),检索数据并填充到 EditText 中。 要保存数据,请使用 SharedPreference。 见shared preference examplethis

          【讨论】:

            猜你喜欢
            • 2013-03-30
            • 2011-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-16
            • 1970-01-01
            • 2012-02-28
            相关资源
            最近更新 更多