循环完成后启动onActivityResult

时间:2018-08-10 04:05:45

标签: android android-intent android-activity onactivityresult

我有一个buttonClickListener旨在卸载多个应用程序,因此我为此运行了一个for循环,我想在所有卸载过程完成后启动onActivityResult。到目前为止,onActivityResult会在每次卸载后运行。最后只需要一个onActivityResult。我有什么办法吗?

 btnSelection.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < appList.size(); i++) {
                    AllApps singleApp= appList.get(i);
                    if (singleApp.isSelected()) {
                        String app_pkg_name = singleApp.getPackageName();
                        Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
                        intent.setData(Uri.parse("package:" + app_pkg_name));
                        intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
                        startActivityForResult(intent, UNINSTALL_REQUEST_CODE);
                    }
                }
            }
        });

这是onActivityResult:

   @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode==UNINSTALL_REQUEST_CODE){

          //things to do 

        }
    }

3 个答案:

答案 0 :(得分:3)

首先,是不可能的,但是您只需对最后一条命令执行onActivityResult即可,为此,您需要首先拥有一个过滤列表

btnSelection.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // filter selected apps
    List<AllApps> temp = new ArrayList<>();
    for(AllApps app : appList){
        if(app.isSelected())
            temp.add(app);
    }

    // invoke app uninstallations
    for (int i = 0; i < temp.size()-1; i++) {
        startActivity(uninstallAppIntent(temp.get(i)));
    }
    // invoke get result for last entry
    startActivityForResult(uninstallAppIntent(temp.get(temp.size()-1)), UNINSTALL_REQUEST_CODE);
    }
});

// to avoid code duplicity
Intent uninstallAppIntent(Allapps singleApp){
    String app_pkg_name = singleApp.getPackageName();
    Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
    intent.setData(Uri.parse("package:" + app_pkg_name));
    intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
    return intent;
}

答案 1 :(得分:0)

一种可能的解决方案:

您可以将变量i放在意图数据上,并检查i==app.size()是否在onActivityResult上。

答案 2 :(得分:0)

它是If语句的简单用例。您可以使用boolean或仅检查适当的条件。检出下面的代码。

btnSelection.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AllApps singleApp=null;
            for (int i = 0; i < appList.size(); i++) {
                if (appList.get(i).isSelected()) {
                    singleApp=appList.get(i);
                }
            }
            if(singleApp!=null){
                String app_pkg_name = singleApp.getPackageName();
                Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
                intent.setData(Uri.parse("package:" + app_pkg_name));
                intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
                startActivityForResult(intent, UNINSTALL_REQUEST_CODE);
            }
        }
    });

注意,如果appList包含多个选中的项目,那么将使用最后一个索引的项目。在这种情况下,如果要首先选择项目,则应该break循环。