当前位置: 首页 > 知识库问答 >
问题:

Android OnCreate输入包始终为空

闻安宜
2023-03-14

我正在承担这个项目,但我在活动和保存状态方面遇到了一些问题。因此,我回到了最基本的方面,试图理解我遗漏了什么。然而,即使是一个非常简单的设置,我也有同样的问题。

因此,我从一个空项目开始,在activity_main.xml上放置了2个文本视图和1个按钮,在activity_2.xml上放置了1个按钮。用户将在文本框中输入一些文本,按下按钮前进到Activity2活动,然后按下按钮(在Activity2布局中)返回到Main活动。

我希望输入到文本框中的文本已被重写的onSaveInstanceState方法保存,然后OnCreate中的bundle参数将保存此值。但是,当点击MainActivity时,尽管按下启动Activity2的按钮时调用了onSaveInstanceState,但捆绑包始终为null。

我错过什么了吗?onSaveInstanceState方法肯定已启动,并且其中已填充savedInstanceState,因此,为什么在再次启动MainActivity并调用onCreate时捆绑包savedInstanceState为空?这是我开始其他活动的方式吗?

谢谢你的帮助!

以下是我的设置,仅供参考:

我的主要活动:

public class MainActivity extends AppCompatActivity {

    Button forwardButton;
    TextView editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        forwardButton = findViewById(R.id.buttonForward);
        editText = findViewById(R.id.editText);
        forwardButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Code here executes on main thread after user presses button
                Intent activity2 = new Intent(MainActivity.this,Activity2.class);
                startActivity(activity2);
            }
        });
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        String textToSave = editText.getText().toString();
        savedInstanceState.putString("editText",textToSave);
        super.onSaveInstanceState(savedInstanceState);
    }
}``

我的活动2类:

public class Activity2 extends AppCompatActivity {

    Button goBack;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);

        goBack = findViewById(R.id.goBack);
        goBack.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Code here executes on main thread after user presses button
                Intent activity2 = new Intent(Activity2.this,MainActivity.class);
                startActivity(activity2);
            }
        });
    }
}

Activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/buttonForward"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="162dp"
        android:layout_marginTop="232dp"
        android:layout_marginEnd="162dp"
        android:layout_marginBottom="76dp"
        android:text="Forward"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="96dp"
        android:layout_marginTop="43dp"
        android:layout_marginEnd="102dp"
        android:layout_marginBottom="268dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Enter"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

</androidx.constraintlayout.widget.ConstraintLayout>

activity_2.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Activity2">

    <Button
        android:id="@+id/goBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="162dp"
        android:layout_marginTop="232dp"
        android:layout_marginEnd="162dp"
        android:layout_marginBottom="76dp"
        android:text="Go back"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

共有1个答案

何嘉运
2023-03-14

在您的活动中2

    goBack.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Activity2.this.finish();
        }
    });

并在MainActivity中从onRestoreInstanceState

//this will trigger when the same instance of activity is restored
//by the back press that finishes the Activity2
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);

  String data = savedInstanceState.getString("editText");

}
 类似资料:
  • 下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!

  • 我正在尝试读取文本文件并创建数组。使用文件的前2个值设置数组,这些值出现在第一行。然后将文件中的所有剩余项添加到数组中。由于某种原因,我的数组也总是为空。需要做哪些修正才能使其正常运行?

  • 我有两个不同的活动,在第一个活动中,我在一些EditText中输入一些信息,然后进入第二个活动,但当我返回时,第一个活动中EditText上的文本消失了。 以下是第一个活动的OnCreate() 我正在使用onSaveInstanceState方法保存信息 在进行调试时,我可以看到确实在onSaveInstanceState方法中填充了savedInstanceState捆绑包,但在OnCreat

  • 我将Spring Boot版本='1.4.0.rc1'与Spring Boot Stormpath 1.0.2一起使用。 我试图使用多部分文件上传,但MultipartFile在控制器中总是为空。 这是控制器,在下面的代码中,总是成功,总是失败: 我的集成测试使用改型: 我使用自动配置,所以我唯一的自定义配置类配置StormPath: 更新:这是传出请求。我不确定如何在多部分解析器本身中启用日志记

  • 本文向大家介绍文本框倒叙输入让输入框的焦点始终在最开始的位置,包括了文本框倒叙输入让输入框的焦点始终在最开始的位置的使用技巧和注意事项,需要的朋友参考一下 所谓的文本框倒叙输入是指输入框的焦点始终在最开始的位置,如图所示,当我输入123456789时,在输入框上显示的是987654321。 为什么要做这个Demo?是因为在项目中遇到了,项目需求是两个输入框,一个正序输入,另一个倒叙输入。 下面我把

  • 问题内容: 我正在编写一个C#ASP.Net MVC应用程序,供客户端将文件发布到其他服务器。我正在使用通用处理程序来处理从客户端到服务器的发布文件。但是在我的处理程序中,System.Web.HttpContext.Current.Request.Files始终为空(0个计数)。 表格代码: 处理程序: 请帮我。谢谢。 问题答案: 最后,我发现了问题。 由于某些原因,控制器中的代码永远无法正常工