【发布时间】: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方法。
【问题讨论】:
标签: android android-listview adapter android-adapter android-recyclerview