我尝试在我的应用程序中实现分页.notifydatasetchanged()只加载一个项目而不是20个元素的全新列表。如果有人可以帮我解决这个问题?这是我初始化列表的方式。
public static ArrayList<HashMap<String, String>> artistsData = new ArrayList<>();
这是我的帖子执行,我设置了分页并通知数据集已更改,显示更多按钮:
protected void onPostExecute(ArrayList<HashMap<String, String>> list) {
super.onPostExecute(list);
if (pd.isShowing()) {
pd.dismiss();
}
if (list != null) {
if (ActiveProductsFragment.page == 1 ) {
mMostViewedAdapter = new ActiveListAdapter(context, list);
listView.setAdapter(mMostViewedAdapter);
Utils.b = new Button(context);
Utils.b.setText(context.getString(R.string.more));
Utils.b.setTextColor(000000);
Utils.b.setTextColor(context.getResources().getColor(android.R.color.white));
Utils.b.setBackgroundColor(context.getResources().getColor(R.color.text_color));
Utils.b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActiveProductsFragment.page++;
ActiveProductsTask artistTask = new ActiveProductsTask(context, listView);
artistTask.execute();
}
});
listView.addFooterView(Utils.b);
} else {
mMostViewedAdapter = new ActiveListAdapter(context, list);
mMostViewedAdapter.notifyDataSetChanged();
}
} else {
Utils.showToastMessage(context, context.getString(R.string.no_record));
}
}
这是我的适配器的主要代码。
public ActiveListAdapter(Context context, ArrayList<HashMap<String, String>> data) {
this.context = context;
this.data = data;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
答案 0 :(得分:0)
不要创建适配器的新实例,使用如下所示
artistsData.clear();
artistsData.addAll(list);
mMostViewedAdapter.notifyDataSetChanged();
对于其他部分,请执行此操作而不是
mMostViewedAdapter = new ActiveListAdapter(context, list);
mMostViewedAdapter.notifyDataSetChanged();
答案 1 :(得分:0)
这就是为我解决的问题
1 - 全球宣布Arraylist
public static ArrayList<HashMap<String, String>> artistsData= new ArrayList<>();
然后在后执行
上执行此操作if (list != null) {
mMostViewedAdapter = new ProductShopMallAdapter(context, list);
if (currentPage == 1) {
listView.setAdapter(mMostViewedAdapter);
} else {
mMostViewedAdapter.notifyDataSetChanged();
}
}