Java Listview没有';t使用notifydatasetchanged with Asynctask刷新数据
我正在异步任务的后台向ArrayList添加项。在PostExecute上,我创建了一个自定义适配器,在其中传入ArrayListJava Listview没有';t使用notifydatasetchanged with Asynctask刷新数据,java,android,android-listview,Java,Android,Android Listview,我正在异步任务的后台向ArrayList添加项。在PostExecute上,我创建了一个自定义适配器,在其中传入ArrayList 当我想添加更多项目时,ListView不会刷新。到目前为止,我已经: private class ProgressBlogList extends AsyncTask<String, Integer, String> { ProgressBar blog_progress; ProgressBar laProgress = new Pro
当我想添加更多项目时,ListView不会刷新。到目前为止,我已经:
private class ProgressBlogList extends AsyncTask<String, Integer, String> {
ProgressBar blog_progress;
ProgressBar laProgress = new ProgressBar(getActivity(), null, android.R.attr.progressBarStyle);
ArrayList<Integer> posts = new ArrayList<Integer>();
@Override
protected void onPreExecute() {
super.onPreExecute();
blog_lista = (ListView) getView().findViewById(R.id.blog_list);
blog_progress = (ProgressBar) getView().findViewById(R.id.blog_progress);
if (blog_lista.getVisibility() == View.VISIBLE) {
blog_lista.addFooterView(laProgress);
}
}
@Override
protected String doInBackground(String... strings) {
DatabaseHelper db = new DatabaseHelper(getActivity());
arraydir = db.getTenItemBlogList(arraydir, id_number);
for(int i = 0; i<arraydir.size(); i++){
Integer post = arraydir.get(i).getId_post();
posts.add(post);
}
arrayImages = db.getImagePost(posts);
id_number = arraydir.size();
db.close();
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
AdapterBlogList adapter = new AdapterBlogList(getActivity(), arraydir,arrayImages);
blog_lista.setAdapter(adapter);
adapter.notifyDataSetChanged();
index = blog_lista.getFirstVisiblePosition();
View v = blog_lista.getChildAt(0);
top = (v == null) ? 0 : v.getTop();
blog_lista.setVisibility(View.VISIBLE);
blog_lista.removeFooterView(laProgress);
blog_progress.setVisibility(View.GONE);
}catch (Exception e) {
Log.e(e.getMessage(), "Error IVAN::");
}
blog_lista.setSelectionFromTop(index, top);
blog_lista.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem + visibleItemCount == totalItemCount) {
if (footerProgress != null) {
if (footerProgress.getStatus() != Status.RUNNING) {
footerProgress = new ProgressBlogList();
footerProgress.execute();
}
}else{
footerProgress = new ProgressBlogList();
footerProgress.execute();
}
}
}
});
blog_lista.setSelectionFromTop(index, top);
}
}
私有类ProgressBlogList扩展了异步任务{
ProgressBar blog_progress;
ProgressBar laProgress=新的ProgressBar(getActivity(),null,android.R.attr.progressBarStyle);
ArrayList posts=新的ArrayList();
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
blog_lista=(ListView)getView().findViewById(R.id.blog_列表);
blog_progress=(ProgressBar)getView().findviewbyd(R.id.blog_progress);
if(blog_lista.getVisibility()==View.VISIBLE){
blog_lista.addFooterView(laProgress);
}
}
@凌驾
受保护的字符串背景(字符串…字符串){
DatabaseHelper db=新的DatabaseHelper(getActivity());
arraydir=db.getTenItemBlogList(arraydir,id_编号);
对于(int i=0;我建议您将管理ListView的活动与AsyncTask分开。每个部分都有其目的,不要混淆。我会将结果ArrayList传递给管理ListView的活动,并通过Intent获得它,创建适配器后,它会更干净,可能会解决您的问题k NOTIFYDATASETCHENGE()在更新传递给列表的同一适配器对象时起作用,但在这里每次都要创建新的适配器对象没有意义。感谢您的回答,但我尝试不重新创建适配器,无法解决我的问题。您好,请发布一个回答,解释您如何解决此问题,并接受它。我面临同样的问题