如何在切换到另一个活动并返回时保存活动表单字段

4

我有两个活动,分别是MainActivityAddressActivity。在MainActivity中,我有三个编辑框和一个文本视图。 在文本视图上,我添加了一个单击事件以启动另一个Activity AddressActivity。

  • 在AddressActivity中,我正在从谷歌地图获取地址。
  • 在从用户获取地址后,我将此地址设置到MainActivity中的TextView中。

现在的问题是当我从AddressActivity返回MainActivity时,MainActivity中的EditText字段会被重置。 相反,我希望用户在EditText中所设置的内容仍然存在。

public class MainActivity extends Activity{
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 }

 public void openAddress(View view) {
        startActivity(new Intent(this, AddressActivity.class));
    }

}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#20ffffff">
           <EditText
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Give a title"
                />
             <EditText
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Give description"
                />
            <TextView
                android:id="@+id/issue_map_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Exact Address"
                android:onClick="openAddress"/>
               <Button
                    android:id="@+id/btn_submit"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal|center_vertical"
                    android:onClick="onsubmit"
               />
</LinearLayout>

AddressActivity.java

public class AddressActivity extends Activity{
   // Async call
   // IN this way i am sending the address string to the Main Activity
   @Override
        protected void onPostExecute(LatLng latLng) {
            Intent i = new Intent(AddressActivity.this, MainActivity.class);
            i.putExtra("address", userAddress.toString());
            startActivity(i);
        }   
}

问题是从AdressActivity获取的数据被设置到MainActivity中,但所有EditText也被重置了。 我想保留输入的EditText数据...如何处理...


你正在查看新的MainActivity,或者你可以先将值保存在偏好设置中,然后再使用它。 - Naveen Tamrakar
你正在使用startActivityForResult从地址活动中获取结果,或者你正在从地址活动再次启动主活动。 - Meenal
当从AddressActivity返回MainActivity时,您是否在MainActivity的onActivityResult中获得了结果? - Mukesh Rana
@anand,请检查我的答案。 - Meenal
如果重新启动活动,则它们将被重置。否则,它们将不会被重置。 - Meenal
显示剩余2条评论
3个回答

3
使用这段代码。
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   }

public void openAddress(View view) {
    startActivityForResult(new Intent(this, AddressActivity.class),123);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    mTextView.setText(data.getStringExtra("address"));

}

}

在处理地址活动时,需要注意以下事项。
public class AddressActivity extends Activity{
    // Async call
   // IN this way i am sending the address string to the Main Activity
   @Override
      protected void onPostExecute(LatLng latLng) {
                 Intent intent = getIntent();  
                intent.putExtra("address",userAddress.toString());  

                setResult(123,intent);             
               finish();

 }

我无法将数据发送到MainActivity。这意味着在MapActivity中单击按钮时,我正在进行异步调用,但它没有传递到MainActivity... Intent是否正确或者我需要传递一些参数,例如activity类。 - anand
将代码行“Intent intent = new Intent();”替换为“Intent intent = getIntent();”,它就可以工作了。 - Ali
我回到了MainActivity,但是onActivityResult()没有被调用,我不知道为什么。 - anand
你是否使用了startActivityForResult调用Address Activity,并且代码相同? - Meenal

1
在MainActivity的onCreate中添加以下代码:

onCreate

Bundle data = getIntent().getExtras();
if(data != null)
{
   address = data.getString("address");
   myEditText.setText(address);
}

问题出在你发送了 "address" : i.putExtra("address", userAddress.toString());,但是你没有接收它。上面的代码是用来接收 "address" 值的。

不,我已经完成了这一部分。虽然我能够在MainActivity中设置地址字符串,但其他EditText字段都为空了... - anand
这是因为你只发送了一个字符串("address")。另一个字符串在哪里?请更新你的代码,你在MainActivity中的问题代码显示你没有对意图进行任何操作。 - Blaze Tama

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接