我有一个自定义的回收站适配器类,并且已将安装的应用程序从设备设置为recyclerView。我有一个“卸载”按钮,按下该按钮可从recyclerView卸载选定的应用程序。我的问题是,每当卸载完成时,onActivityResult我就将notifyDatasetChanged方法设置为recyclerAdapter,但仍然可以在recyclerView中找到已卸载的应用程序。
appList = getInstalledApps();
mAdapter = new CardViewDataAdapter(appList);
mRecyclerView.setAdapter(mAdapter);
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() == true) {
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(resultCode==UNINSTALL_REQUEST_CODE && resultCode == RESULT_OK ){
mAdapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "RecyclerView Updated!!",
Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:1)
删除后,您应从EInvalidCast
删除卸载应用程序。
procedure (const Value: Pointer; const RTTIField: TRTTIField; const XMLNode: IXMLNode);
var
Temp1: OLEVariant;
Temp2: TValue;
begin
Assert(XMLNode.HasAttribute(Ref, Namespace));
Temp1 := XMLNode.GetAttributeNS(Ref, Namespace);
Temp2 := TValue.FromVariant(Temp1);
Temp2 := Temp2.Convert(RTTIField.FieldType.Handle{, FormatSettings}); // in Spring.TValueHelper
RTTIField.SetValue(Value, Temp2);
end;
将影响您的列表,如果您将列表中的任何更改传递给了适配器。
答案 1 :(得分:0)
您是否尝试在appList中删除“卸载应用程序”?类似于appList.remove(item)。 appList中的数据不会更改,因此此卸载应用程序不会消失。
答案 2 :(得分:0)
您没有删除该项目意味着已卸载的应用程序。首先,您必须删除该项目 从数组列表中,然后必须做-
notifyItemRemoved(position);
notifyItemRangeChanged(0, arraylist.size());
此处第一行将通知回收者视图此位置的物料已被删除,然后第二行通知回收者视图列表项的范围。
您必须在用户单击回收站视图的任何项目时获取被单击的项目的位置。然后在onActivityResult上,只需从回收站视图的数组列表中删除该位置的项目。 注意:您必须在回收器视图适配器上创建arraylist和integer位置变量才能执行此操作。 }