一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

startActivityForResult()替代方案Activity Result Api_startactivityforresult替代

 instl 2023-06-15 發(fā)布于廣西

startActivityForResult()在使用過(guò)程中,還需要與onActivityResult()配對(duì)使用,定義大量的requestCode,屬實(shí)比較麻煩,而現(xiàn)在startActivityForResult()方法已經(jīng)被谷歌標(biāo)記為了Deprecated,方法不推薦使用了,谷歌推薦使用Activity Results API
首先引入:

    implementation 'androidx.activity:activity:1.2.0-beta01'
    implementation 'androidx.fragment:fragment:1.3.0-beta01'

第一個(gè)activity代碼:

public class MainActivity extends AppCompatActivity {

    ActivityResultLauncher launcher = registerForActivityResult(new ResultContract(), new ActivityResultCallback<String>() {
        @Override
        public void onActivityResult(String result) {
            Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
        }
    });

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.tv_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                launcher.launch(true);
            }
        });
    }

    class ResultContract extends ActivityResultContract<Boolean, String> {
        @NonNull
        @Override
        public Intent createIntent(@NonNull Context context, Boolean input) {
            Intent intent = new Intent(MainActivity.this, MainActivity2.class);
            intent.putExtra("b", input);
            return intent;
        }

        @Override
        public String parseResult(int resultCode, @Nullable Intent intent) {
            return intent.getStringExtra("s");
        }
    }
}
  • 自定義Contract繼承自ActivityResultContract,有兩個(gè)參數(shù)類(lèi)型,一個(gè)是傳遞類(lèi)型,另一個(gè)是返回類(lèi)型。在createIntent()中構(gòu)造Intent ,在parseResult()中從intent解析返回參數(shù)。
  • registerForActivityResult()注冊(cè)Contract,并處理返回參數(shù)業(yè)務(wù)邏輯。
    注意這里,如果不在聲明ActivityResultLauncher時(shí)注冊(cè),會(huì)報(bào)錯(cuò):
Caused by: java.lang.IllegalStateException: LifecycleOwner com.example.test2.MainActivity@5a3abbd is attempting to register while current state is STARTED. LifecycleOwners must call register before they are STARTED.
  • launcher.launch()執(zhí)行,傳入?yún)?shù)。

第二個(gè)activity代碼和以前方式一樣:

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        findViewById(R.id.tv_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(RESULT_OK, new Intent().putExtra("s", "哈哈哈"));
                finish();
            }
        });
    }

}

以上就是一個(gè)簡(jiǎn)單的完整使用過(guò)程。

參考:再見(jiàn)!onActivityResult!你好,Activity Results API!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    国自产拍偷拍福利精品图片| 亚洲中文字幕乱码亚洲| 国产中文另类天堂二区| 日韩女优精品一区二区三区| 亚洲五月婷婷中文字幕| 大香伊蕉欧美一区二区三区| 国产又粗又猛又大爽又黄| 欧洲日本亚洲一区二区| 久久精品国产亚洲av麻豆尤物| 一二区中文字幕在线观看| 麻豆欧美精品国产综合久久| 日韩精品亚洲精品国产精品| 国产成人精品在线播放| 国语久精品在视频在线观看| 日本本亚洲三级在线播放| 国产欧美日韩精品一区二| 青草草在线视频免费视频| 国产精品免费福利在线| 精品一区二区三区免费看| 日韩国产亚洲一区二区三区| 欧美亚洲美女资源国产| 日韩日韩欧美国产精品| 免费观看一区二区三区黄片| 色一情一伦一区二区三| 亚洲伦片免费偷拍一区| 国产女高清在线看免费观看| 黑色丝袜脚足国产一区二区| 欧美激情区一区二区三区| 我的性感妹妹在线观看| 亚洲av熟女一区二区三区蜜桃 | 欧美午夜一区二区福利视频| 99热中文字幕在线精品| 99日韩在线视频精品免费| 国产又色又爽又黄又大| 福利专区 久久精品午夜| 色婷婷人妻av毛片一区二区三区| 亚洲男人的天堂久久a| 日本高清不卡一二三区| 国产视频在线一区二区| 欧美激情视频一区二区三区| 成人国产激情福利久久|