如何当我移动到下一个活动,再回来恢复活动的价值? [英] How to restore values of a activity when i move to next activity and come back again?

查看:133
本文介绍了如何当我移动到下一个活动,再回来恢复活动的价值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想,当用户回来我的第一个活动编辑文本的值恢复?
请帮助我。

在此先感谢

这是我的第一个活动code在编辑文本获取用户值

 公共类IntentActivity延伸活动{
ED1的EditText,ED2;
浮ed1_val,ed2_val;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);    ED1 =(EditText上)findViewById(R.id.editText1);
    ED2 =(EditText上)findViewById(R.id.editText2);
    按钮旁边=(按钮)findViewById(R.id.button1);    next.setOnClickListener(新OnClickListener(){
        公共无效的onClick(视图v){
            意向意图=新意图(getApplicationContext()
                    Second_activity.class);
            startActivity(意向);
        }
    });
}/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onSaveInstanceState(捆绑savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);    ed1_val = Float.parseFloat(ed1.getText()的toString());
    ed2_val = Float.parseFloat(ed2.getText()的toString());    Log.v(TAG,里面保存的实例);
    savedInstanceState.putFloat(ED1+ ed1_val);
    savedInstanceState.putFloat(ED2+ ed2_val);
}@覆盖
公共无效onRestoreInstanceState(捆绑savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);    Log.v(TAG,里面有关于恢复);
    浮ed_val = savedInstanceState.getFloat(ED1);
    浮ed2_val = savedInstanceState.getFloat(ED2);    ed1.setText(+ ed_val);
    ed2.setText(+ ed2_val);
    }
}

这是我的第二个活动code

 公共类Second_activity延伸活动{
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.second_xml);    按钮回到=(按钮)findViewById(R.id.button1);
    back.setOnClickListener(新OnClickListener(){
        公共无效的onClick(视图v){
            意向意图=新意图(getApplicationContext()
                    IntentActivity.class);
            startActivity(意向);
            }
        });
    }
}


解决方案

您不需要的onSaveInstanceState既不也不onRestoreInstanceState。
只需调用在onclick监听器完成在第二个活动按钮:

 进口android.app.Activity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.EditText;公共类IntentActivity延伸活动{
    ED1的EditText,ED2;
    浮ed1_val,ed2_val;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        ED1 =(EditText上)findViewById(R.id.editText1);
        ED2 =(EditText上)findViewById(R.id.editText2);
        按钮旁边=(按钮)findViewById(R.id.button1);        next.setOnClickListener(新OnClickListener(){
            公共无效的onClick(视图v){
                意向意图=新意图(getApplicationContext()
                        Second_activity.class);
                startActivity(意向);
            }
        });
    }}

这是第二个:

 进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;公共类Second_activity延伸活动{
    // TODO自动生成方法存根
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.second_xml);        按钮回到=(按钮)findViewById(R.id.button1);
        back.setOnClickListener(新OnClickListener(){
            公共无效的onClick(视图v){
                完();
            }
        });
    }
}

你恢复previous活动,而不是开始新的方式。
如果你需要在它们之间传递数据,你可以使用的 startActivityForResult / 的onActivityResult 的setResult 的方法:

 进口android.app.Activity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;
进口android.widget.EditText;公共类IntentActivity延伸活动{
    私有静态最终诠释GET_VALUES_REQUEST_ID = 1;
    公共静态最后弦乐FIRST_VALUE_ID =first_value_id;
    公共静态最后弦乐SECOND_VALUE_ID =second_value_id;
    私有静态最终浮动DEFAULT_VALUE = 0;    ED1的EditText,ED2;
    浮ed1_val,ed2_val;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        ED1 =(EditText上)findViewById(R.id.editText1);
        ED2 =(EditText上)findViewById(R.id.editText2);
        按钮旁边=(按钮)findViewById(R.id.button1);        next.setOnClickListener(新OnClickListener(){
            公共无效的onClick(视图v){
                意向意图=新意图(getApplicationContext()
                        Second_activity.class);
                startActivityForResult(意向,GET_VALUES_REQUEST_ID);
            }
        });
    }    @覆盖
    保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
        开关(要求code){
        案例GET_VALUES_REQUEST_ID:{
            如果(Activity.RESULT_OK ==结果code){
                ed1_val = data.getFloatExtra(FIRST_VALUE_ID,DEFAULT_VALUE);
                ed2_val = data.getFloatExtra(SECOND_VALUE_ID,DEFAULT_VALUE);
                setValues​​方法();
            }
            打破;
        }
        }
        super.onActivityResult(要求code,结果code,数据);
    }
    保护无效setValues​​方法(){
        ed1.setText(Float.toString(ed1_val));
        ed2.setText(Float.toString(ed2_val));
    }}

第二项活动可能是类似的东西:

 进口android.app.Activity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;公共类Second_activity延伸活动{
    // TODO自动生成方法存根
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.second_xml);        按钮回到=(按钮)findViewById(R.id.button1);
        back.setOnClickListener(新OnClickListener(){
            公共无效的onClick(视图v){
                意图数据=新的Intent();
                data.putExtra(IntentActivity.FIRST_VALUE_ID,324f);
                data.putExtra(IntentActivity.SECOND_VALUE_ID,32234f);
                的setResult(Activity.RESULT_OK,数据);
                完();
            }
        });
    }
}

这是一个非常基本的例子,所以我只是很难codeD一些返回值 - 请实施一些更有意义。
除此之外,你可以尽量避免使用下划线作为单词分隔符在类名 - 骆驼案件更接受命名惯例

I want the values of edit text restored when user comes back to my first activity? Please help me out.

Thanks in advance

this is my first activity code for getting user values in edit text

public class IntentActivity extends Activity {
EditText ed1, ed2;
float ed1_val, ed2_val;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ed1 = (EditText) findViewById(R.id.editText1);
    ed2 = (EditText) findViewById(R.id.editText2);
    Button next = (Button) findViewById(R.id.button1);

    next.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(),
                    Second_activity.class);
            startActivity(intent);
        }
    });
}

/** Called when the activity is first created. */
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);

    ed1_val = Float.parseFloat(ed1.getText().toString());
    ed2_val = Float.parseFloat(ed2.getText().toString());

    Log.v("TAG", "inside saved instance");
    savedInstanceState.putFloat("ed1", +ed1_val);
    savedInstanceState.putFloat("ed2", +ed2_val);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    Log.v("TAG", "inside on restore");
    float ed_val = savedInstanceState.getFloat("ed1");
    float ed2_val = savedInstanceState.getFloat("ed2");

    ed1.setText("" + ed_val);
    ed2.setText("" + ed2_val);
    }
}

this is my second activity code

public class Second_activity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_xml);

    Button back = (Button) findViewById(R.id.button1);
    back.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(),
                    IntentActivity.class);
            startActivity(intent);
            }
        });
    }
}

解决方案

You don't need neither onSaveInstanceState nor onRestoreInstanceState. Just call finish in the onClick listener for the button in the second Activity:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class IntentActivity extends Activity {
    EditText ed1, ed2;
    float ed1_val, ed2_val;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ed1 = (EditText) findViewById(R.id.editText1);
        ed2 = (EditText) findViewById(R.id.editText2);
        Button next = (Button) findViewById(R.id.button1);

        next.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),
                        Second_activity.class);
                startActivity(intent);
            }
        });
    }

}

This is the second one:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Second_activity extends Activity {
    // TODO Auto-generated method stub
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_xml);

        Button back = (Button) findViewById(R.id.button1);
        back.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                finish();
            }
        });
    }
}

That way you are resuming the previous Activity instead of starting new one. If you need to pass data between them you could use startActivityForResult / onActivityResult and setResult methods:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class IntentActivity extends Activity {
    private static final int GET_VALUES_REQUEST_ID = 1;
    public static final String FIRST_VALUE_ID = "first_value_id";
    public static final String SECOND_VALUE_ID = "second_value_id";
    private static final float DEFAULT_VALUE = 0;

    EditText ed1, ed2;
    float ed1_val, ed2_val;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ed1 = (EditText) findViewById(R.id.editText1);
        ed2 = (EditText) findViewById(R.id.editText2);
        Button next = (Button) findViewById(R.id.button1);

        next.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),
                        Second_activity.class);
                startActivityForResult(intent, GET_VALUES_REQUEST_ID);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case GET_VALUES_REQUEST_ID: {
            if (Activity.RESULT_OK == resultCode) {
                ed1_val = data.getFloatExtra(FIRST_VALUE_ID, DEFAULT_VALUE);
                ed2_val = data.getFloatExtra(SECOND_VALUE_ID, DEFAULT_VALUE);
                setValues();
            }
            break;
        }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }


    protected void setValues() {
        ed1.setText(Float.toString(ed1_val));
        ed2.setText(Float.toString(ed2_val));
    }

}

The second activity could be something like that:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Second_activity extends Activity {
    // TODO Auto-generated method stub
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_xml);

        Button back = (Button) findViewById(R.id.button1);
        back.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent data = new Intent();
                data.putExtra(IntentActivity.FIRST_VALUE_ID, 324f);
                data.putExtra(IntentActivity.SECOND_VALUE_ID, 32234f);
                setResult(Activity.RESULT_OK, data);
                finish();
            }
        });
    }
}

This is a very basic example so I just hardcoded some return values - please implement something more meaningful. Beside that you could avoid using underscores as word separator in class names - camel case is much more accepted as name convention.

这篇关于如何当我移动到下一个活动,再回来恢复活动的价值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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