从RecyclerView中“隐藏”物品

时间:2019-05-12 17:24:06

标签: android android-recyclerview

“隐藏” RecyclerView中的项目。删除项目,但允许用户将其带回。用户必须能够将所有移除的物品带回来。对此可以采取不同的方法。

enter image description here

上面的链接是列表的屏幕截图。我希望能够从列表中隐藏一个项目(如上图所示),但仍然允许用户将所有隐藏的项目带回到列表中。

用于填充列表的代码。

    //Method used to retrieve all installed applications
    private ArrayList<AppData> getInstalledPackages() {
        List<String> appsList = new ArrayList<>();
        ArrayList<AppData> appDataArrayList = new ArrayList<AppData>();
        AppInfoExtractor apkInfoExtractor = new AppInfoExtractor(this);
        appsList = apkInfoExtractor.GetAllInstalledApkInfo();
        if (appsList != null && appsList.size() > 0) {
            for (int i = 0; i < appsList.size(); i++) {

                AppData appData = new AppData();
                appData.setAppName(apkInfoExtractor.GetAppName(appsList.get(i)));
                appData.setPackageName(appsList.get(i));
                Version version = new Version();
                version.setVersionName(apkInfoExtractor.getVersionName(appsList.get(i)));
                version.setVersionCode(apkInfoExtractor.getAppVersionCode(appsList.get(i)));
                List<String> grantedPermissions = getPermissionsForPackage(appsList.get(i));
                List<String> grantedPermissionsShort = getShortPermissionStrings(grantedPermissions);
                version.setPermissions(grantedPermissionsShort);
                ArrayList<Version> versions = new ArrayList<Version>();
                versions.add(version);
                appData.setVersions(versions);
                appDataArrayList.add(appData);
            }
        }
        return appDataArrayList;
    }

列表适配器的代码。

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        AppInfoExtractor apkInfoExtractor = new AppInfoExtractor(context1);

        final String ApplicationPackageName = (String) stringList.get(position);
        final String ApplicationLabelName = apkInfoExtractor.GetAppName(ApplicationPackageName);
        Drawable drawable = apkInfoExtractor.getAppIconByPackageName(ApplicationPackageName);

        viewHolder.textView_App_Name.setText(ApplicationLabelName);

        viewHolder.textView_App_Package_Name.setText(ApplicationPackageName);
        viewHolder.tv_version_name.setText("Version Name: " + apkInfoExtractor.getVersionName(ApplicationPackageName));
        viewHolder.tv_version_code.setText("Version Code: " + apkInfoExtractor.getAppVersionCode(ApplicationPackageName));

        viewHolder.imageView.setImageDrawable(drawable);

        //Adding click listener on CardView to open clicked application directly from here .
        viewHolder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent perm = new Intent(context1, AppDetailActivity.class);
                perm.putExtra("PACKAGE_NAME", ApplicationPackageName);
                perm.putExtra("APP_NAME", ApplicationLabelName);
                context1.startActivity(perm);
            }
        });
    }

3 个答案:

答案 0 :(得分:0)

请参考Recyclerview Swipe to removerecyclerView中删除项目。

要取消隐藏所有项目,请添加带有“取消全部隐藏”选项的菜单选项。
在列表中滑动时存储所有已删除的数据,并在选择“全部取消隐藏”菜单选项后将其附加到recyclerView数据中。

希望有帮助。

答案 1 :(得分:0)

您可以使用ItemTouchHelper对RecyclerView中的项目执行“滑动删除”功能。删除项目后,显示带有“撤消”操作的小吃店。单击“撤消”时,再次将项目添加回列表中。 请检查here,并让我知道这是否适合您。

答案 2 :(得分:0)

您可以简单地创建另一个列表来保存隐藏的项目,因此,当用户从主列表中隐藏项目时,它会从主列表中删除并添加到隐藏的项目列表中。并取消隐藏按钮以将其带回到主列表并将其从隐藏列表中删除。