Android Activity Result Launcher
更新日期 2023-06-01
我们已经知道启动activity的时候可以传递一些参数。那么在关闭activity时,能不能将一些数据传回上一个activity呢?
本文给出1个例子,实现关闭activity时,将一些数据传回给上一个activity。
例子中会有2个Activity来做示范,ForResultResultLauncher1Act
和ForResultSecondAct
。
使用示例
启动新的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。它可以设置返回时携带的数据。
| 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类的静态常量。可用于代表操作的结果。
| /** 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