我有一个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
}
}
答案 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
循环。