2014-01-19 31 views
0

我試圖做一個列表視圖,允許您執行所選應用程序的多個卸載。我寫了這段代碼。問題從列表視圖中選擇和刪除多個應用程序

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    if(requestCode == 1) { 
     try { 
      for(int a=0; a<adapter.getPositions().size(); a++) { 
       applicationInfo = getPackageManager().getApplicationInfo(adapter.getList().get(a), a); 
      } 
     } catch(PackageManager.NameNotFoundException e) { 
      for(int b=0; b<adapter.getPositions().size(); b++) { 
      items = adapter.getPositions().get(b); 
      appInfoArrayList.remove(items); 
      } 
      adapter.notifyDataSetChanged(); 
      } 

    } 
    else { 

    } 
} 

此代碼有效但不完全。例如,讓我解釋一下,如果我選擇應用普通用戶(所以他們不是系統應用),他們會從列表中正確刪除。如果我僅選擇應用程序系統,則它們不會被卸載,因此不會從列表中刪除。到目前爲止,手術是正確的。問題是,當我選擇例如兩個應用程序系統應用程序和兩個正常。在這種情況下,選定的系統應用程序將從列表中刪除。爲什麼?哪裏有問題?

回答

0

您的代碼可能會提前退出。

它看起來像你循環的項目。如果發生異常,則取消循環,然後啓動另一個清空整個列表的循環。

也許把try catch放在原來的for循環中是解決方案嗎?

像:

for(int a=0; a<adapter.getPositions().size(); a++) { 
    try { 
     applicationInfo = getPackageManager(). 
      getApplicationInfo(adapter.getList().get(a), a); 
    } 
    catch(PackageManager.NameNotFoundException e) { 
     items = adapter.getPositions().get(a); 
     appInfoArrayList.remove(items); 
     adapter.notifyDataSetChanged(); 

     a--; 
    } 

} 
+0

我試過,但不幸的是,問題仍 – user3187166