如何从另一个活动中编辑和获取 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 输入字段的更新?的主要内容,如果未能解决你的问题,请参考以下文章