活动1调用活动2,并从活动2获取字符串结果

时间:2018-08-08 15:43:09

标签: android android-intent android-activity

我正在将Putextra从第一个活动传递到第二个活动。我验证传递给第二活动的内容。我按预期工作。我的问题是如何将字符串值传递回第一个活动。

在这里我从第一开始叫第二个活动。

public void scannedItem(String barCode,String localArea){
    Intent intent = new Intent(this,selectItemActivity.class);
    intent.putExtra("Barcode",mScan);
    intent.putExtra("Area",myArea);
    startActivityForResult(intent,1);
   // finish();
}

在第二个活动中,我正在从第一个活动中接收数据,就像这样

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select_item);
    passedArea = getIntent().getExtras().getString("Area");
    passedScan=getIntent().getExtras().getString("Barcode");

    updateScreen();
}

我对第一个活动传递的附加内容执行验证,并希望将单个字符串传递回第一个活动。在第二项活动中,我加载了RecyclerViewer,并尝试了onClick。

    public void onSelectClick(View view){
        String lSelectLocation = mLocations.getLocation();
        Timber.d(lSelectLocation);
        Intent intent = getIntent();
        intent.putExtra("Location",lSelectLocation);
        finish();
    }

我的问题至少是两部分。 1.)我在第二次活动中将String值传回时有什么错。 2)在第一次活动中,需要什么来接收字符串。我已经尝试过onResume,但以下为空。

protected void onResume() {
    super.onResume();
    final String sender=this.getIntent().getExtras().getString("Location");
    if(sender != null)
    {
        this.receiveData();
        Toast.makeText(this, "Received", Toast.LENGTH_SHORT).show();

    }

}

我在第一次活动时也有此方法,但似乎没有被解雇。

受保护的void onActivityResult(int requestCode,String requestLocation,Intent data){         mLoc.setText(requestLocation);     }

在过去的几个月中,我在Java中学到了很多东西。我曾担任VB.net程序员多年,有时会迷失在差异中。

谢谢大家。

2 个答案:

答案 0 :(得分:1)

getIntent();代替onSelectClick方法中的new Intent();,并定义setResult,因为它将调用此方法来设置活动返回给其调用者的结果。

public void onSelectClick(View view){
    String lSelectLocation = mLocations.getLocation();
    Timber.d(lSelectLocation);
    Intent intent = new Intent();
    intent.putExtra("Location",lSelectLocation);
    setResult(1, intent);
    finish();
}

在第一个活动中,请使用onActivityResult从第二个活动中获取返回值,而不是在onResume中。

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

    if (resultCode == 1) {

        String str_location = null;
        if (data != null) {
            str_location = data.getStringExtra("Location");
            if (str_location != null) {
                Toast.makeText(MainActivity.this, str_location, Toast.LENGTH_LONG).show();
            }
        }

    }
}

答案 1 :(得分:0)

在活动2中使用setResult,在活动1中使用on doc获取onActivityResult中的值。...