【问题标题】:How do i manage startActivityForResult on Android?如何在 Android 上管理 startActivityForResult?
【发布时间】:2019-06-22 21:38:17
【问题描述】:

在我的活动中,我通过 startActivityForResult 从主要活动中调用第二个活动。在我的第二个活动中,有一些方法可以完成此活动(可能没有结果),但是,其中只有一个返回结果。

例如,从主要活动中,我调用了第二个活动。在这个活动中,我正在检查手机的一些功能,例如它是否有摄像头。如果没有,那么我将关闭此活动。此外,在准备 MediaRecorder 或 MediaPlayer 的过程中,如果出现问题,我将关闭此活动。

如果它的设备有摄像头并且录制完成,那么在录制视频后,如果用户点击完成按钮,我会将结果(录制视频的地址)发送回主活动。

如何检查主要活动的结果?

【问题讨论】:

标签: android


【解决方案1】:

SecondActivity 中的一个良好结果示例可能是:

setResult(Activity.RESULT_OK, getIntent());
finish();

这样你就可以从SecondActivity“回复”任务成功了,intent可以携带你的信息。

然后,在你的FirstActivity

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode==YOUR_REQUEST_CODE && Activity.RESULT_OK == resultCode) {
        // Stuff went fine
    }
}

【讨论】:

    【解决方案2】:

    在主要活动中你应该有这个:

    public static final int REQUEST_CODE = 1;
    Button button = (Button) findViewById(R.id.your_button);
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // actions that will happen when the button is pressed:
    
            Intent intent = new Intent(this, SecondActivity.class);
            startActivityForResult(intent, REQUEST_CODE);
        }
    });
    

    在第二个活动中,您应该从点击的 RecyclerView 传递列表项的位置等结果,像这样:

    ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
    clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
        @Override
        public void onEntryClick(View view, int position) {
            Intent intent = new Intent();
            intent.putExtra("pos", position);
            setResult(Activity.RESULT_OK, intent);
            finish();
        }
    });
    recyclerView.setAdapter(clickAdapter);
    

    在主要活动中,您应该有一个获取结果的方法,这是您的方法:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if (requestCode == REQUEST_CODE) {
    
            if (resultCode == Activity.RESULT_OK) {
                int result = data.getIntExtra("pos");
                // do something with the result
    
            } else if (resultCode == Activity.RESULT_CANCELED) {
                // some stuff that will happen if there's no result
            }
        }
    }
    

    【讨论】:

      最近更新 更多