Android - 通过意图传递具有不同键名的相同值

时间:2017-02-16 02:41:33

标签: android android-intent

我有两项活动Activity AMapActivity B

在活动A中,我有两个textviews名为来源和目的地

当我点击源文本视图时,会调用mapactivity B并在texview中设置用户当前位置。结果使用intent传递给Activity A,并在源textview中设置。

单击目标文本视图时如何执行相同的过程?

是否可以使用意图中的不同键名发送相同的值?由于我是Android的新手,所以感谢您的帮助。 感谢。

5 个答案:

答案 0 :(得分:0)

你可以在同一个意图中添加许多额外内容。

Intent i = new Intent(this, MapActivity.class);
i.putExtra("Value_1", "some data ");
i.putExtra("Value_2", "another data");

答案 1 :(得分:0)

我认为这可以简单地完成。首先,将该文本视图值转换为字符串。在您需要的同一个包中的所有活动中使用该字符串。确保该字符串应声明为static。

public static String xyz;

答案 2 :(得分:0)

是的,你可以。请按照以下代码进行操作。

ActivityOne

findViewById(R.id.tv_destination).setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         Intent intent = new Intent(ActivityOne.this, ActivityTwo.class);
         intent.putExtra(ActivityTwo.KEY_ONE, "destination");
         startActivity(intent)
     }
});

findViewById(R.id.tv_source).setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         Intent intent = new Intent(ActivityOne.this, ActivityTwo.class);
         intent.putExtra(ActivityTwo.KEY_TWO, "source");
         startActivity(intent)
    }
});

ActivityTwo

public class ActivityTwo extends Activity {
public static final String KEY_ONE = "com.example.name.activity.KEY_ONE";
public static final String KEY_TWO = "com.example.name.activity.KEY_TWO";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    Bundle bundle = getIntent().getExtras();
    if(bundle.containsKey(KEY_ONE)){
        String destination = bundle.get(KEY_ONE);
    }
    if(bundle.containsKey(KEY_TWO)){
        String sourceAddress = bundle.get(KEY_TWO);
    }
}

完成工作:)

答案 3 :(得分:0)

为您的两个请求创建两个整数常量,1。源地址和2.目标地址

final static int SOURCE_ADDRESS = 1;
final static int DESTINATION_ADDRESS = 2;

从MainActivity中使用startActivityForResult()方法调用MapActivity

在你的监听器中,根据EditText

的资源ID调用它
Intent i = new Intent(MainActivity.this, MapActivity.class);
switch(v.getId()){
     case R.id.source:
            startActivityForResult(i, SOURCE_ADDRESS);
            break;
     case R.id.destination:
            startActivityForResult(i, DESTINATION_ADDRESS);
            break;

在MapActivity中设置要返回MainActivity的数据。

  Intent returnIntent = new Intent();
  returnIntent.putExtra("address",result);
  setResult(Activity.RESULT_OK,returnIntent);
  finish();

现在,在MainActivity类中,为onActivityResult()方法编写以下代码。

  @Override 
  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        if (resultCode == Activity.RESULT_OK) {
              String address=data.getStringExtra("address");
              if(requestCode ==  SOURCE_ADDRESS){ 
                      //Assign the address to source address TextView
              } else if (requestCode == DESTINATION_ADDRESS){
                     //Assign the address to destination address
              } 
         } else {
              //write code if no value is returned
         }
   }

答案 4 :(得分:0)

您可以使用startActivityForResult来解决问题。 通过使用不同的请求代码来获取该文本。