在活动之间发送变量

时间:2016-04-21 20:56:20

标签: java android android-activity

这个问题很简单。 例如,主要活动和主要活动2有2个活动。 如何从主要活动2向主要活动发送字符串(例如)。 如果主要活动2得到字符串,请说。它调用一个函数来改变那个字符串。 然后如何将更改后的字符串发送回主要活动?

2 个答案:

答案 0 :(得分:0)

标准方式:

如果要将原始数据从Activity1发送到Activity2,则需要使用Intent。例如,如果您只想发送一个字符串:

public class Activity1 extends Activity {
   public static final String EXTRA_STRING = "extra_string";

   private void sendString(String s) {
        Intent intent = new Intent(this, Activity2.class);
        intent.putExtra(EXTRA_STRING, s);
        startActivity(intent);
   }
}

假设您在Activity2中更改了该字符串并希望将结果返回到Activity1,则需要在Activity1中使用startActivityForResult(),在Activty2中使用setResult()

例如:

public class Activity1 extends Activity {
   public static final String EXTRA_STRING = "extra_string";
   private static final int REQUEST_CODE = 1;

   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
       if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
           // Get the string back
           String changedString = data.getStringExtra(Activity2.EXTRA_STRING);
       }
   }


   private void sendString(String s) {
        Intent intent = new Intent(this, Activity2.class);
        intent.putExtra(EXTRA_STRING, s);
        startActivityForResult(intent, REQUEST_CODE);
   }
}

在Activity2中:

public class Activity2 extends Activity {
    public static final String EXTRA_STRING = "string_extra";
    private String myString;

    @Override
    public void onCreate(Bundle bundle) {
         // receive the string from activity1
         if (getIntent() != null) {
              myString = getIntent().getStringExtra(Activity1.EXTRA_STRING);
         }  
    }

    // Send the string back to activity1
    private void sendBack() {
        Intent data = new Intent();
        data.putExtra(EXTRA_STRING, myString);
        setResult(RESULT_OK, data);
        finish();
    }
}

该方法的缺点是您只能发送原始变量。如果要发送对象,则必须实现ParcelableSerializable

快速简便的方法:

您可以使用EventBus发送任何类型的变量,活动,服务或任何您想要的任何复杂对象。请查看Documentation以了解如何使用它。这真的很快捷。

答案 1 :(得分:0)

从主要活动1发送字符串:

                Intent intent = new Intent(this, MainActivity2);
                intent.putExtra("string", stringVal);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);

然后在主要活动2中,收到字符串:

String str = getIntent().getExtras().getString("string");

然后只需更改值并将其发送回主要活动1,如果需要,您可以在onResume中获取意图,但检查空值。