再次提出我的问题。很抱歉重复。
我有一个ListView,其中设备上安装了所有应用程序。点击该项目,部分卸载。到目前为止一切正常,问题是一旦卸载了应用程序,它就不再在设备上,它仍然在列表中。显然这并不好,因此我编写了这段代码,试图在卸载后删除它。
int position;
myListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
int requestCode = 1;
app = appInfoArrayList.get(position);
Uri packageUri = Uri.parse("package:"+app.packagename);
//In theory i should put
//this.position=position;
//But Eclipse says "position cannot be resolved or is not a field"
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageUri);
startActivityForResult(uninstallIntent, requestCode);
}
});
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
String msg = "MyApp: ";
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1)
{
try {
packageInfo = getPackageManager().getApplicationInfo(app.packagename, 0);
}
catch (PackageManager.NameNotFoundException e) {
Log.v("Catch",msg );
appInfoArrayList.remove(position);
adapter.notifyDataSetChanged();
}
}
else {
}
Log.v(msg, String.valueOf(resultCode)+", "+String.valueOf(requestCode));
}
在LogCat中我读到:MyApp:Catch 0(resultCode),1(requestCode)所以这意味着在catch中正确输入,但尽管如此,即使已经卸载了应用程序仍然在列表中。关于如何解决这个问题的想法?提前谢谢。
适配器声明
AppAdapter adapter;
答案 0 :(得分:0)
您应该重新绘制列表,在更新适配器数据源之后调用adapter.notifyDataSetChanged(),如果您使用相同的ArrayList来存储和显示数据,这应该可以解决问题
答案 1 :(得分:0)
您在异常
上使用此功能appInfoArrayList.remove(position);
adapter.notifyDataSetChanged();
这应该被正确调用以反映更改,检查数据
答案 2 :(得分:0)
position
中的appInfoArrayList.remove(position);
未初始化,请确保为其指定值。