跳转至

Android Activity Result Launcher

更新日期 2023-06-01
  • 2023-06-01 创建文档

我们已经知道启动activity的时候可以传递一些参数。那么在关闭activity时,能不能将一些数据传回上一个activity呢?

本文给出1个例子,实现关闭activity时,将一些数据传回给上一个activity。

例子中会有2个Activity来做示范,ForResultResultLauncher1ActForResultSecondAct

使用示例

启动新的Activity

ForResultResultLauncher1Act是第一个Activity。

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;

import com.rustfisher.baselib.AbsActivity;

/**
 * 演示返回是传递参数
 */
public class ForResultResultLauncher1Act extends AbsActivity {
    private TextView mTitleTv;
    private TextView mSubTitleTv;

    private ActivityResultLauncher<Intent> mEditInfoLauncher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TAG += "1";
        setContentView(R.layout.act_for_res_first);
        mTitleTv = findViewById(R.id.tv1);
        mSubTitleTv = findViewById(R.id.tv2);

        findViewById(R.id.edit_btn).setOnClickListener(v -> mEditInfoLauncher.launch(new Intent(getApplicationContext(), ForResultSecondAct.class)));

        mEditInfoLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
            Log.i(TAG, "修改昵称返回: " + result);
            if (result.getResultCode() == RESULT_OK) {
                mTitleTv.setText(result.getData().getStringExtra(ForResultSecondAct.K_TITLE));
                mSubTitleTv.setText(result.getData().getStringExtra(ForResultSecondAct.K_SUB_TITLE));
            } else {
                Toast.makeText(getApplicationContext(), "未保存修改", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

启动第二个Activity时,用到了ActivityResultLauncher

调用registerForActivityResult方法注册返回时的结果事件。回传的数据在result中。

装载回传数据

ForResultSecondAct是第二个activity。它可以设置返回时携带的数据。

1
2
3
4
5
Intent resultIntent = new Intent();
resultIntent.putExtra(K_TITLE, mTitleEt.getText().toString());
resultIntent.putExtra(K_SUB_TITLE, mSubTitleEt.getText().toString());
setResult(RESULT_OK, resultIntent);
finish();

RESULT_OK是Activity类的静态常量。可用于代表操作的结果。

1
2
3
4
5
6
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED    = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK           = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER   = 1;

参考

本站说明

一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~

📖AndroidTutorial 📚AndroidTutorial 🙋反馈问题 🔥最近更新 🍪投喂作者

Ads