当我移动到下一个活动并再次返回时,如何恢复活动的值?

时间:2012-03-27 09:35:24

标签: android android-intent

我想在用户返回第一个活动时恢复编辑文本的值? 请帮帮我。

提前致谢

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

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

这是我的第二个活动代码

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

6 个答案:

答案 0 :(得分:2)

在背压下再次开始第一个活动并不是一个好主意。在第二个活动中调用finish()。这将导致您需要的第一项活动的恢复。

back.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        finish();            }
    });
}

答案 1 :(得分:1)

你可以去覆盖 protected void onSaveInstanceState(Bundle outState) protected void onRestoreInstanceState(Bundle savedInstanceState)

Here就是一个例子

请记住,当您无法完成之前的活动时,它会起作用。请在第一项活动中执行此操作。

答案 2 :(得分:1)

您既不需要onSaveInstanceState也不需要onRestoreInstanceState。 只需在onClick监听器中为第二个Activity中的按钮调用finish:

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

}

这是第二个:

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

这样你就恢复了之前的Activity而不是开始新的Activity。 如果您需要在它们之间传递数据,可以使用 startActivityForResult / onActivityResult setResult 方法:

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

}

第二项活动可能是这样的:

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

这是一个非常基本的例子,所以我只是硬编码了一些返回值 - 请实现更有意义的东西。 除此之外,您可以避免在类名中使用下划线作为单词分隔符 - 驼峰案例更多地被接受为名称约定。

答案 3 :(得分:0)

刚刚完成第二个活动,不要通过意图启动它。 完成第二个活动后,第一个活动将自动恢复,

答案 4 :(得分:0)

您正在按Second Activity上的后退按钮开始新活动。新活动实例不是之前已启动第二个活动的实例,因此不会调用onRestoreInstanceState回调。

答案 5 :(得分:0)

如果您不需要将数据发送回第一个活动,这很容易。如何在不使用意图的情况下发回数据。