在列表视图中一次显示 10 个项目,在滚动一段时间后显示接下来的 10 个项目,依此类推

Display 10 items at a time in list view and next 10 after some scroll and so on

提问人:Akshaya Amar 提问时间:5/13/2023 最后编辑:Akshaya Amar 更新时间:5/13/2023 访问量:24

问:

我想在列表视图中显示手机中所有已安装的应用程序。但是,我想一次显示 10 个应用程序。现在,当用户滚动时,应该显示另外 10 个(来自其余应用程序),依此类推。

这是我的代码

    List<PackageInfo> packageList = getPackageManager().getInstalledPackages(0);
    
            List<String> appNames = new ArrayList<>();
    
            for (PackageInfo packageInfo : packageList) {
                if ((packageInfo.applicationInfo.flags & android.content.pm.ApplicationInfo.FLAG_SYSTEM) == 0) {
                 appNames.add(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
                }
            }
    
            ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, appNames);
            listView.setAdapter(adapter);

任何建议如何实现此功能?

我已经实现了 RecyclerView 而不是列表视图,这是代码

private int visibleThreshold = 10;
--
--
--


        appNames = new ArrayList<>();
        adapter = new AppListAdapter(appNames);
        recyclerView.setAdapter(adapter);

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                totalItemCount = layoutManager.getItemCount();
                lastVisibleItem = layoutManager.findLastVisibleItemPosition();

                if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    // Load the next batch of applications
                    loadMoreApps();
                    loading = true;
                }
            }
        });

        loadMoreApps();
    }

    private void loadMoreApps() {

        int start = appNames.size();
        int end = start + 10;

        List<PackageInfo> packageList = getPackageManager().getInstalledPackages(0);
        for (int i = start; i < Math.min(end, packageList.size()); i++) {
            PackageInfo packageInfo = packageList.get(i);
            if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
                appNames.add(packageInfo.applicationInfo.loadLabel(getPackageManager()).toString());
            }
        }

        adapter.notifyDataSetChanged();
        loading = false;
    }
}
安卓 android-listview

评论

2赞 Zain 5/13/2023
您可以使用 和 分页库RecyclerView
0赞 Akshaya Amar 5/13/2023
@Zain我已经按照您的建议实现了 RecyclerView 并添加了相同的代码,但没有获得预期的结果
0赞 Zain 5/14/2023
您注册了 RecyclerView,并且 Paging 库的工作方式不同,您甚至不需要注册该侦听器;请看一下文档或任何关于分页库的好教程RecyclerView.OnScrollListener

答: 暂无答案