如何从另一个活动中编辑和获取 editText 输入字段的更新?

Posted

技术标签:

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

我正在尝试玩两个活动。编辑和查看活动。我想从编辑活动中获取输入并在视图活动中显示。在编辑活动中,我有 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_
    android:layout_
    tools:context=".ViewActivity">

    <LinearLayout
        android:layout_
        android:layout_
        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_
            android:layout_
            android:ems="10"
            android:hint="First Name"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/LNInput"
            android:layout_
            android:layout_
            android:ems="10"
            android:hint="Last Name"
            android:inputType="textPersonName" />

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

        <Button
            android:id="@+id/okButton"
            android:layout_
            android:layout_
            android:text="Edit" />
    </LinearLayout>

    <TextView
        android:id="@+id/viewTV"
        android:layout_
        android:layout_
        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_
    android:layout_
    tools:context=".EditActivity">


    <LinearLayout
        android:layout_
        android:layout_
        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_
            android:layout_
            android:ems="10"
            android:hint="First Name"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/LNInput"
            android:layout_
            android:layout_
            android:ems="10"
            android:hint="Last Name"
            android:inputType="textPersonName" />

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

        <TableRow
            android:layout_
            android:layout_ >

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

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

    </LinearLayout>

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


</RelativeLayout>

【问题讨论】:

【参考方案1】:

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

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

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

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

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

    您每次都使用相同的 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

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

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

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

【讨论】:

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

以上是关于如何从另一个活动中编辑和获取 editText 输入字段的更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何在edittext中获取列表选定项目?

如何从一个活动中获取edittext值到下一个活动的recyclerview?

无法从片段中的 SQLite 获取数据

EditText处于非活动状态时如何设置提示位置

如何从另一个布局中获取按钮的文本值?

当我们从另一个活动返回时如何刷新活动的数据?