如何从当前活动中获取结果然后返回到上一个活动

时间:2018-03-24 05:29:08

标签: android sharedpreferences

我为不同的国家/地区开展了五项活动。例如,印度,斯里兰卡,阿根廷,美国,中国,每项活动都包含选址活动来挑选当前的地方。

当我按下印度活动上的按钮时,会启动地点选择器活动。并选择位置并在印度活动上显示此位置。这样当我按下阿根廷活动上的按钮时,将启动地点选择器活动。并选择位置并在阿根廷活动中显示此位置。

为此,我想将一些数据发送回上一个屏幕。我使用了共享偏好设置,但是当我从任何活动中选择位置时,它总是在印度活动中显示数据,而不是我之前启动了地点选择器活动的活动。

简而言之,我需要从这个Place picker Activity获得一个结果,然后回到上一个。

下面是我从地点选择器发送数据的代码

__init__

,这是显示数据的每个活动中的代码

   CharSequence city = place.getName();
   CharSequence cityAddress = place.getAddress();

            SharedPreferences settings = getSharedPreferences("city_address", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("city_address", (String) cityAddress);
            editor.putString("city_name", (String) city);
            editor.commit();

            Intent intent = new Intent(this, India.class);
            startActivity(intent);

我已经了解了StartActivityForResult()方法,但我还不确定如何正确使用它,任何示例?请帮助我,我是Android工作室的新手。

2 个答案:

答案 0 :(得分:3)

  

当我按下印度活动上的按钮时,地方选择器活动   启动并选择位置并在印度显示此位置   活性。

正如您所说,地方选择器活动是获取数据,在获取数据后,您需要返回“相关国家/地区”活动并希望显示该详细信息。

我的建议是使用 onResume() startActivityforResult 方法。

方法1

在您的地点选择器活动

            SharedPreferences settings = getSharedPreferences("city_address", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("city_address", (String) cityAddress);
            editor.putString("city_name", (String) city);
            editor.commit();
            finish();

在您的国家/地区活动中

 @Override
    public void onResume() {
       SharedPreferences settings = getSharedPreferences("city_address", Context.MODE_PRIVATE);
       String n = settings.getString("city_name", "");
       String a = settings.getString("city_address", "");
       cityname.setText(n);
       cetlocation.setText(a);
}

方法2

在您的国家/地区活动中,当您开始广告选择器活动时,请使用

Intent i = new Intent(this, Placepickeractivity.class);
startActivityForResult(i, 1);

并覆盖onActivityResult方法,

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == 1){
          String n = data.getStringExtra("city_name");
          String a = data.getStringExtra("city_address");
          cityname.setText(n);
          cetlocation.setText(a);

        }
    }
}

在您的地点选择器活动中,将结果发送为,

Intent returnIntent = new Intent();
returnIntent.putExtra("city_address", (String) cityAddress);
returnIntent.putExtra("city_name", (String) city);
setResult(1, returnIntent);
finish();

答案 1 :(得分:0)

在您当前的活动中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 101 && resultCode == RESULT_OK) {
        // Receive and handle your data
    }
}

处理已发送的结果

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

例如:在secondActivity中,如果要发回数据:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

如果您不想返回数据:

parentNode