4

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

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

主要活动1

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

主活动2

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

    }
}

}

先感谢您。

4

5 回答 5

6

尝试将这些代码复制到您的 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();        
}
}
于 2013-12-22T05:55:39.107 回答
1

您必须将数据保存在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();
    }
}
于 2013-09-10T17:12:41.623 回答
0

在 onDestroy 函数中编写代码以将文本保存在 edittext 中,您将不得不覆盖它。当再次创建活动时(在 onCreate 方法中),检索数据并填充到 EditText。要保存数据,请使用 SharedPreference。请参阅共享偏好示例

于 2013-09-10T17:15:32.583 回答
0

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

希望这可以帮助。

问候!

于 2013-09-10T17:06:09.550 回答
0

你是对的,这与使用新的Intent.

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

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

于 2013-09-10T17:09:51.667 回答