【问题标题】:How to edit and get the updates of the editText input fields from another activity?如何从另一个活动中编辑和获取 editText 输入字段的更新?
【发布时间】:2023-03-30 05:30:02
【问题描述】:

我正在尝试玩两个活动。编辑和查看活动。我想从编辑活动中获取输入并在视图活动中显示。在编辑活动中,我有 ok/submit 按钮,它批准更改并返回查看活动,在这种情况下,输入文本字段应使用输入的数据进行更新。如果按下取消按钮,则显然没有进行任何更改,用户将被带回查看活动。

我已经正确完成了大部分实现,但我无法让输入的数据显示在视图活动中。我错过了什么?

这是我用于编辑和查看活动的代码。

ViewActivity.java

import androidx.appcompat.app.AppCompatActivity;

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

public class ViewActivity extends AppCompatActivity {
    public static final String EXTRA_FNAME = "EXTRA_TEXT";
    public static final String EXTRA_LNAME = "EXTRA_TEXT";
    public static final String EXTRA_EMAIL = "EXTRA_TEXT";

    String Fname, Lname, email;
    EditText FNInput, LNInput, emailInput;
    Button editButton;

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

        FNInput = (EditText) findViewById(R.id.FNInput);
        LNInput = (EditText) findViewById(R.id.LNInput);
        emailInput = (EditText) findViewById(R.id.emailInput);

        editButton = (Button) findViewById(R.id.okButton);
        editButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openEditActivity();
            }
        });

        Fname = FNInput.getText().toString();
        Lname = LNInput.getText().toString();
        email = emailInput.getText().toString();
    }
    public void openEditActivity(){

        Intent intent = new Intent(this, EditActivity.class);
        intent.putExtra(EXTRA_FNAME, Fname);
        intent.putExtra(EXTRA_LNAME, Lname);
        intent.putExtra(EXTRA_EMAIL, email);
        startActivity(intent);
    }
}

EditActivity.java

import androidx.appcompat.app.AppCompatActivity;

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

public class EditActivity extends AppCompatActivity {
    public static final String EXTRA_FNAME = "EXTRA_TEXT";
    public static final String EXTRA_LNAME = "EXTRA_TEXT";
    public static final String EXTRA_EMAIL = "EXTRA_TEXT";

    String Fname, Lname, email;
    EditText FNInput, LNInput, emailInput;
    Button okButton, cancelButton;

    private static final String TAG = "EditActivity";


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

        FNInput = (EditText) findViewById(R.id.FNInput);
        LNInput = (EditText) findViewById(R.id.LNInput);
        emailInput = (EditText) findViewById(R.id.emailInput);
        okButton = (Button) findViewById(R.id.okButton);
        cancelButton = (Button) findViewById(R.id.cancelButton);

        okButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updateViewActivity();
            }
        });

        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FNInput.setText("");
                LNInput.setText("");
                emailInput.setText("");
                finish();
            }
        });
    }

    public void updateViewActivity(){
        Fname = FNInput.getText().toString();
        Lname = LNInput.getText().toString();
        email = emailInput.getText().toString();

        FNInput.setText(Fname);
        LNInput.setText(Lname);
        emailInput.setText(email);

        Intent intent = new Intent(this, ViewActivity.class);
        intent.putExtra(EXTRA_FNAME, Fname);
        intent.putExtra(EXTRA_LNAME, Lname);
        intent.putExtra(EXTRA_EMAIL, email);
        startActivity(intent);
    }
}

activity_view.xml

<RelativeLayout 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=".ViewActivity">

    <LinearLayout
        android:layout_width="270dp"
        android:layout_height="374dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="57dp"
        android:layout_marginTop="75dp"
        android:orientation="vertical">

        <EditText
            android:id="@+id/FNInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="First Name"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/LNInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Last Name"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/emailInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="info@mail.com"
            android:inputType="textEmailAddress" />

        <Button
            android:id="@+id/okButton"
            android:layout_width="153dp"
            android:layout_height="wrap_content"
            android:text="Edit" />
    </LinearLayout>

    <TextView
        android:id="@+id/viewTV"
        android:layout_width="134dp"
        android:layout_height="33dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginEnd="135dp"
        android:layout_marginBottom="18dp"
        android:text="View Activity"
        tools:layout_editor_absoluteX="15dp"
        tools:layout_editor_absoluteY="687dp" />

</RelativeLayout>

activity_edit.xml

<RelativeLayout 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=".EditActivity">


    <LinearLayout
        android:layout_width="270dp"
        android:layout_height="374dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="57dp"
        android:layout_marginTop="75dp"
        android:orientation="vertical">

        <EditText
            android:id="@+id/FNInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="First Name"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/LNInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Last Name"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/emailInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="info@mail.com"
            android:inputType="textEmailAddress" />

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <Button
                android:id="@+id/okButton"
                style="@style/Widget.AppCompat.Button.Borderless.Colored"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="OK"
                android:textColor="#03A9F4" />

            <Button
                android:id="@+id/cancelButton"
                style="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Cancel"
                android:textAlignment="center" />
        </TableRow>

    </LinearLayout>

    <TextView
        android:id="@+id/viewTV"
        android:layout_width="108dp"
        android:layout_height="38dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="169dp"
        android:layout_marginBottom="18dp"
        android:text="Edit Activity" />


</RelativeLayout>

【问题讨论】:

    标签: android android-layout android-intent


    【解决方案1】:

    很抱歉这篇文章会很长。 当你想做这样的事情时,你必须遵循一些步骤并正确地遵循它们。它们是:-

    • 首先,明确自己想要做什么,这意味着你的目标
    • 其次,尝试了解您应该做什么来实现该目标,例如 - 可能需要做哪些事情、资源、教程(针对此场景)等。
    • 最后让我们开始搜索并学习如何做到这一点。

    在这里,我可以告诉你问题出在哪里,你开始学习但没有完成学习。我可以看到您只是无缘无故地复制并粘贴到两个不同的活动中。

    好吧,我正在分享我从您的上述代码中发现的问题:-

    1. 您的ViewActivity.java 应该包含一些TextView,您打算在其中显示来自您的EditActivity.java 的数据,而这些数据不存在。

    2. 您每次都使用相同的 key 发送数据(复制粘贴的另一个证明,不知道发生了什么),这是 -

      public static final String EXTRA_FNAME = "EXTRA_TEXT"; // use it as EXTRA_FNAME public static final String EXTRA_LNAME = "EXTRA_TEXT"; // use it as EXTRA_LNAME public static final String EXTRA_EMAIL = "EXTRA_TEXT"; // use it as EXTRA_EMAIL

    3. 当您将数据发送到您的视图活动时,您需要使用getIntent() 接收您发送的内容,例如:- String s = getIntent().getStringExtra("EXTRA_FNAME"); 这将返回从您之前的活动分配给此key 的值,同时发送到现在的活动。

    4. 收到所需的值后,在下一行填充您的 TextView,如下所示:- textView.setText(s); // fetched from getIntent() previously

    有关更多信息,您可以查看this tutorial,它展示了如何将数据从一个活动传递和查看到另一个活动。希望你能理解。

    【讨论】:

    • 感谢您的建议。在构建或解决某事时制定策略确实有很大帮助。该链接帮助我了解了该过程。我不太确定接收部分。仍然不太清楚为什么应该这样使用 putExtra() 函数。
    • 假设您知道HashMap 的工作原理,是的,它可以作为key - value 对工作。你可以把情况联系起来。这里 - putExtra() : 该方法主要用于将数据/值放入意图映射中,然后将其发送到接收者活动,例如intent.putExtra("key","value")getStringExtra() : 那么,您已将数据发送到您的下一个活动,您将如何接收该数据?好吧,您需要先获取意图,然后使用getIntent().getStringExtra("key") 之类的类型获取相应的数据。希望你能理解。
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2013-02-07
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多