onBackPressed可以设置并返回意图结果吗?

时间:2015-11-19 03:41:56

标签: android android-intent onactivityresult onbackpressed

我的MainActivity可以调用两个不同的活动(a& b)。活动A的调用如下:

   private View.OnLongClickListener alc = new View.OnLongClickListener(){
    public boolean onLongClick(View v) {
        Intent j = new Intent(MainActivity.this,AActivity.class);
        startActivityForResult(j, 1);
        return true;
    }
};

A活动有两个按钮,一个用于SAVE,另一个用于CANCEL。 SAVE返回结果......

    public void onClick(View v) {
    switch(v.getId()){
        case R.id.btnSave:
            Intent returnIntent = new Intent();
            setResult(RESULT_OK,returnIntent);
            finish();
            break;
        case R.id.btnCxl:
            finish();
            break;
    }
}

这完美地运作!!

我想要活动B的类似回报。我修改了它的Intent调用如下......

private View.OnClickListener ac = new View.OnClickListener() {
    public void onClick(View v) {
        Intent j = new Intent(MainActivity.this,BActivity.class);
        startActivityForResult(j, 1);
    }
};

在B活动中,我没有“保存”按钮来捕捉"。浏览后,我看到onBackPressed()可用,因为这就是我通常离开此活动的方式。我读过我应该能够将结果代码放在网上其他地方..

public void onBackPressed() {
    super.onBackPressed();
    Intent returnIntent = new Intent();
    setResult(RESULT_OK, returnIntent);
    }

在MainActivity中的Log.i中进行了一些onActivityResult次调用...

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("MYLOG","In Result");
    if (requestCode==1) {
        Log.i("MYLOG","In Result 1");
        if (resultCode == RESULT_OK) {
            Log.i("MYLOG","In Result 1 OK");
            // Do some data processing and display here!!
        }
    }
}

如上所述,A活动正常运行......点击所有三个Log.i语句。 B活动排在前两位,但从未达到第三位。

我在这里缺少什么?

谢谢皮特

2 个答案:

答案 0 :(得分:2)

您需要在onbackpress

中添加完成
     super.onBackPressed();
    Intent returnIntent = new Intent();
    setResult(RESULT_OK, returnIntent);
finish();

答案 1 :(得分:0)

就我而言,这是可行的:

  • MyActivity覆盖onOptionsItemSelected无效,请勿使用finish();在家庭情况下, 代码如下:

    @Override public boolean onOptionsItemSelected(MenuItem item){ 开关(item.getItemId()) { 案例android.R.id.home: onBackPressed(); 返回true;
    默认值:break; } 返回super.onOptionsItemSelected(item); }

然后,您将大大重写onBackPressed:

   @Override
public void onBackPressed() {
    //super.onBackPressed();//
    Intent intent_return = getIntent();
    intent_return.putExtra("idPaid",p.getId());
    intent_return.putExtra("position", rootPosition);
    intent_return.putExtra("isEdit", isEdit);
    setResult(RESULT_OK, intent_return);
    finish();
}

现在,意图数据将在YourFragment中的onActivityResult中返回。 希望对您有帮助!