保存状态为的EditText和按钮点击 [英] Saving State for EditText and Button Clicks

查看:207
本文介绍了保存状态为的EditText和按钮点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个活动。首页活动的EditText 下一个按钮。第二个活动有一个后退按钮。在首页活动我输入了一些文本在的EditText 和我打下一个按钮。现在,我在 SecondActivity ,如果我preSS 后退按钮将返回到第一个活动结算的EditText 字段。我想那的EditText 字段保持不变。如何实现这些步骤?

FirstActivity:

 公共类HomeActivity延伸活动{
文字的EditText;
Button按钮;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_home);
    文字=(EditText上)findViewById(R.id.editText1);
    按钮=(按钮)findViewById(R.id.button1);
    button.setOnClickListener(新View.OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            意图I =新意图(HomeActivity.this,Second.class);
            startActivity(ⅰ);
        }
    });
} @覆盖
 保护无效的onSaveInstanceState(捆绑outState){
 // TODO自动生成方法存根
 super.onSaveInstanceState(outState); CharSequence的序列= text.getText();
 outState.putCharSequence(savedText序列);
 } @覆盖
 保护无效onRestoreInstanceState(捆绑savedInstanceState){
 // TODO自动生成方法存根
 super.onRestoreInstanceState(savedInstanceState);
 CharSequence的序列= savedInstanceState.getCharSequence(savedText);
 text.setText(序列); }
}

SecondActivity:

 公共类二扩展活动{
按钮B;/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.second);
    B =(按钮)findViewById(R.id.button_back);
    b.setOnClickListener(新View.OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            意图I =新意图(Second.this,HomeActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(ⅰ);
        }
    });}  }


解决方案

在这种特殊情况下,当你想留住你的MainActivity的值,你只需要完成SecondActivity,而不是像

  @覆盖
公共无效的onClick(视图v){
    // TODO自动生成方法存根
    //意图I =新意图(Second.this,HomeActivity.class);
    //i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    // startActivity(ⅰ);
    //只是完成本(SecondActivity)活动
    完();
}

这将perminently关闭第二个活动,而Android Acticity堆栈将显示previous活动及其所有数据。

在更复杂的场景,当你有活动之间复杂的导航和仍然希望在数据领域的挽留,你需要使用的共享preferances 的,保存当你想(idealy导航到其他活动时)的数据,然后重新装入(在onResume())当你回来这项活动。

希望这有助于..:)

I have 2 Activities. First Activity has EditText and Next Button. Second Activity has one Back Button. In First Activity I entered some texts in EditText and I hit Next Button. Now I'm in SecondActivity, If I press Back Button it will return to First Activity clearing the EditText fields. I want that EditText field to remain same. How to achieve these steps?

FirstActivity:

public class HomeActivity extends Activity {
EditText text;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    text = (EditText) findViewById(R.id.editText1);
    button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent(HomeActivity.this,Second.class);
            startActivity(i);
        }
    });
}

 @Override
 protected void onSaveInstanceState(Bundle outState) {
 // TODO Auto-generated method stub
 super.onSaveInstanceState(outState);

 CharSequence sequence = text.getText();
 outState.putCharSequence("savedText", sequence);
 }

 @Override
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
 // TODO Auto-generated method stub
 super.onRestoreInstanceState(savedInstanceState);
 CharSequence sequence = savedInstanceState.getCharSequence("savedText");
 text.setText(sequence);

 }
}

SecondActivity:

public class Second extends Activity {
Button b;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);
    b = (Button) findViewById(R.id.button_back);
    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent(Second.this, HomeActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
        }
    });

}

  }

解决方案

In this specific case, when you want to retain the values of your MainActivity, you just need to finish the SecondActivity instead of creating new intent for HomeActivity like

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    //Intent i = new Intent(Second.this, HomeActivity.class);
    //i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    //startActivity(i);
    //JUST FINISH THIS (SecondActivity) ACTIVITY
    finish();
}

This will close the second activity perminently, and Android Acticity Stack will show the previous activity with all its data.

In the more complex scenarios, when you have complex navigation between activities and still want data to retain in fields, you need to use SharedPreferances, save data when you want (idealy when navigating to other activity) and load again (in onResume()) when you get back to this activity.

Hope this helps..:)

这篇关于保存状态为的EditText和按钮点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆