加载更多 ListView 或 RecyclerView

Posted

技术标签:

【中文标题】加载更多 ListView 或 RecyclerView【英文标题】:Loadmore ListView Or RecyclerView 【发布时间】:2015-09-26 09:51:35 【问题描述】:

我正在为ListView 做更多负载。当我滚动到最后一项时,事件完成了 loadmore。一切运行良好,除了一个问题,即完整的数据加载更多附加适配器,然后当我看到 listview 作为重新加载而不是更早地附加到 ListView 时,我仍然可以识别出新适配器是从头开始制作的。 这是我的课:

public class StoryListMenu extends Activity

    private String URL;
    ListView listViewStory;
    private StoryListMenuAdapter adapter;
    private List<StoryMenu> listStory;
    private ProgressBar progressBar;
    private View progressLoadmore;
    private boolean loadMoreStatus;
    private boolean enableLoadMore;
    private int page;
    private int currentItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_story_list_menu);

        page = 0;
        loadMoreStatus = true;
        enableLoadMore = true;
        currentItem = 0;

        progressBar = (ProgressBar) findViewById(R.id.progress_story_list_menu);
        progressBar.setVisibility(View.VISIBLE);
        progressLoadmore = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.progress_row, null, false);

        URL = getIntent().getStringExtra("url");


        listViewStory = (ListView) findViewById(R.id.listview_story_list_menu);
        listViewStory.setDivider(null);
        listStory = new ArrayList<StoryMenu>();

        listViewStory.setOnScrollListener(new OnScrollListener() 
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) 
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) 
                if(loadMoreStatus && totalItemCount > 0 && firstVisibleItem + visibleItemCount == totalItemCount) 
                    loadMoreStatus = false;
                    page += AppConfig.pageSize;
                    currentItem = firstVisibleItem;
                    listViewStory.addFooterView(progressLoadmore);
                    new GetStoryList().execute();
                
            
        );


        new GetStoryList().execute();
    

    private class GetStoryList extends AsyncTask<Void, Void, Void> 

        @Override
        protected void onPreExecute() 
            super.onPreExecute();
        

        @Override
        protected Void doInBackground(Void... params) 

            ....

                listStory.add(...);   // Data is added here
            ....
            return null;
        

        @Override
        protected void onPostExecute(Void result) 
            super.onPostExecute(result);

            adapter = new StoryListMenuAdapter(listStory, getApplicationContext());
            listViewStory.setAdapter(adapter);
            progressBar.setVisibility(View.GONE);

            if(listViewStory.getFooterViewsCount() > 0) 
                listViewStory.removeFooterView(progressLoadmore);
                if(enableLoadMore)
                    listViewStory.setSelection(currentItem + 1);
                else
                    listViewStory.setSelection(currentItem);
            

            loadMoreStatus = true;
        

    

recyclerview 也遇到过类似的问题。 我看了但找不到如何将数据添加到用户没有注意到列表视图适配器刷新的列表视图适配器的方法。有人对我有什么想法吗?

**更新: 我在listStory 添加项目然后notifyDataSetChanged()。它在ListView 中运行良好,但在RecyclerView 中不起作用。在“RecyclerView”中,我有一种方法可以更新 RecyclerAdapter 中的数据:

public void addItem(int position, StoryMenu item) 
   listStory.add(position, item);
   notifyItemInserted(position);
  

获取更多数据后调用addItem方法。

【问题讨论】:

【参考方案1】:

您必须检查adapter == null 并创建一个新的,如果它不为null,您可以执行adapter.add(items) 和notifyDataSetChanged() 来刷新ListView、ReyclerView。

【讨论】:

如何执行adapter.add(items)?在我的StoryListMenuAdapter 中,我扩展了BaseAdapter。那么如何在adapter中添加item呢? 哦,我尝试使用RecyclerView,当我notifyDataSetChanged() recyclerview 的适配器时它不起作用。它在列表视图中工作正常。 它应该在没有动画的情况下工作。您也可以尝试 notifyItemRangeInserted(int positionStart, int itemCount)

以上是关于加载更多 ListView 或 RecyclerView的主要内容,如果未能解决你的问题,请参考以下文章

UWP-ListView到底部自动加载更多数据

Flutter 开发从 0 到 1ListView 下拉加载和加载更多

Flutter 开发从 0 到 1ListView 下拉加载和加载更多

使用 ListView-Adapter 预加载更多视图

在 ListView 滚动结束时加载更多结果

Flutter listview下拉刷新,上拉加载更多封装