【问题标题】:Saving instance in one activity and displaying in different activity将实例保存在一个活动中并显示在不同的活动中
【发布时间】:2013-02-20 16:54:37
【问题描述】:

我正在尝试在旋转屏幕后点击返回按钮。我知道在屏幕旋转时,正在尝试做的活动是

  1. 在第一个活动中输入消息
  2. 在第二个活动中显示消息
  3. 旋转屏幕并通过onSaveInstanceState()保存“ata”
  4. 重新创建第二个活动
  5. 点击第二个活动的返回按钮(重新创建第一个活动 - 调用 onCreate())

由于 savedInstanceState 不为空,它应该显示保存的任何内容。唉,正在显示空值。这是代码

第一次活动:-

package dummy.pack;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements CommonHandler{

public final static String EXTRA_MESSAGE = "dummy.MESSAGE";
public static String DISPLAY_MESSAGE;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    **if (savedInstanceState != null)
    {
        DISPLAY_MESSAGE = savedInstanceState.getString("message");
        DISPLAY_MESSAGE = DISPLAY_MESSAGE + " calling from create";
        getMessage();
    }**
    else
    {
        setContentView(R.layout.activity_main);
    }
}

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

public void sendMessage(View view)
{
    Intent intent = new Intent (this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

@Override
public void onStart() {
    super.onStart();

}

@Override
public void onStop(){
    super.onStop();

    System.gc();
}

**public void getMessage() {
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(DISPLAY_MESSAGE);
    setContentView(textView);
}**

@Override
public void onRestart (){
    super.onRestart();
    DISPLAY_MESSAGE = "Normal 1";
    getMessage();
}

}

第二次活动:-

package dummy.pack;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class DisplayMessageActivity extends Activity implements CommonHandler{


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //Get the message from Intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    //Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);
    setContentView(textView);
}

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

@Override
**public void onSaveInstanceState(Bundle saveState) {
    saveState.putString("message","Recreate");
    super.onSaveInstanceState(saveState);
}**
}

任何帮助都将不胜感激。

【问题讨论】:

  • 我猜你也需要忽略 MainActivity 活动的 onSaveInstanceState 方法

标签: android android-intent


【解决方案1】:

在清单文件中的活动中添加以下内容

<activity android:name="Activity name"
       android:configChanges="keyboardHidden|orientation|">

这在你的活动中

 if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){

    Log.e("On Config Change","LANDSCAPE");
}else{

    Log.e("On Config Change","PORTRAIT");
}

希望这能解决你的问题

【讨论】:

  • 警告:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)进行开发时防止由于方向更改而导致运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,您必须声明 android:configChanges="orientation|screenSize"。
  • 我只需要知道从一个活动中保存的Bundle在重新创建时是否对另一个活动可见?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多