单击按钮时再次加载android viewtreeObserver

单击按钮时再次加载android viewtreeObserver,android,listview,Android,Listview,我有一个ViewTreeObserver,我想单击按钮并再次重新加载此ListView 这是我的viewTreeObserver代码: menuLinkListView=(ListView) findViewById(R.id.menu_listview); observer= menuLinkListView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListen

我有一个ViewTreeObserver,我想单击按钮并再次重新加载此ListView 这是我的viewTreeObserver代码:

 menuLinkListView=(ListView) findViewById(R.id.menu_listview);
    observer= menuLinkListView.getViewTreeObserver();
      observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
           boolean measured=false;


            @Override
            public void onGlobalLayout() {
                if(!measured){
                listHeight=menuLinkListView.getHeight();

              int spacing =0;
                int  itemsPerRow = 2;
                adapter=new HomeMenuLinksListArrayAdapter(MainActivity.this,MyApplication.articles, listHeight);
                    wrapperAdapter = new MultiItemRowListAdapter(MainActivity.this, adapter, itemsPerRow, spacing);
                   menuLinkListView. setAdapter(wrapperAdapter);
                }
            //  observer.removeGlobalOnLayoutListener(this);
                measured=true;
            }
        });
当我点击按钮时,我想得到新的文章列表,并用新的arrayList重新加载这个列表视图。我该怎么做

请注意,MyApplication.articles=ArrayList of articles

在单击时,我将此任务称为asynk任务:

    getArticles getarticles = new getArticles();
    getarticles.execute("2",tag);
AsynkTask的代码:

public class getArticles extends AsyncTask<String, Void, ArrayList<Article>>
{
    private ProgressDialog pd;
    ArrayList<Article> array = new ArrayList<Article>();
    @Override

    protected void onPreExecute()
    {
          pd=ProgressDialog.show(MainActivity.this, "", MainActivity.this.getResources().getString(R.string.loading), false);
    }

    @Override
    protected ArrayList<Article> doInBackground(String... params) {


           if(Actions.isNetworkAvailable(MainActivity.this))
           {

           Connection.disableSSLCertificateChecking();
             String    url=getResources().getString(R.string.serviceLink)+getResources().getString(R.string.getArticleIssueCat) + "issueId=" + params[0] + "&categoryId=" + params[1]; 

            Connection conn=new Connection( url);


                ArticleXmlPullParser parser = new ArticleXmlPullParser();

                        array=parser.parse(conn.getInputStream());


           }
        return array;
    }


    @Override
    protected void onPostExecute(final ArrayList<Article> p)
    {
         MyApplication.articles = p;
        adapter.notidyDataSetChanged();//here i cann notify for adapter of listview but nothing changed
         try{
               pd.dismiss();
               }catch(Exception e){

               }
    }

}
公共类getArticles扩展异步任务
{
私营部门;
ArrayList数组=新的ArrayList();
@凌驾
受保护的void onPreExecute()
{
pd=ProgressDialog.show(MainActivity.this,”,MainActivity.this.getResources().getString(R.string.loading),false);
}
@凌驾
受保护的ArrayList doInBackground(字符串…参数){
if(Actions.isNetworkAvailable(MainActivity.this))
{
Connection.disableSSLCertificateChecking();
字符串url=getResources().getString(R.String.serviceLink)+getResources().getString(R.String.getArticleIssueCat)+“issueId=“+params[0]+”&categoryId=“+params[1]”;
连接连接=新连接(url);
ArticleXmlPullParser=新的ArticleXmlPullParser();
array=parser.parse(conn.getInputStream());
}
返回数组;
}
@凌驾
PostExecute上受保护的void(最终ArrayList p)
{
MyApplication.articles=p;
adapter.notidyDataSetChanged();//这里我无法通知listview的适配器,但没有任何更改
试一试{
pd.解散();
}捕获(例外e){
}
}
}

问题在于您没有更改适配器上的数据。 适配器上的数据应该有一个set方法

MyApplication.articles=p

adapter.setData(p)

adapter.notidyDataSetChanged()


像这样的事情

不是这样做的。为什么每次调用OnGlobalYout()时都需要创建新适配器?为什么不在onClick()上添加notifyDataChanged()?我刚刚在onClick上添加了notifyDataChanged,但仍然显示了旧的ArrayList代码的问题不在这里。附加更多代码。在onClick()上还有什么?你下载更多的数据吗?添加/删除?为什么需要再次加载列表?附加更多的代码,我会帮助你。好的,我会把我的代码,每次我点击按钮,我想加载新数据并显示在列表上,我会用更多的代码更新我的问题你的意思是
adapter.clear();adapter.addAll(p);adapter.notifyDataSetChanged()及其工作方式:D。。谢谢,我已经有一段时间没有使用带数据的适配器了,而不是游标适配器。在CursorAdapter,你有一个名为CursorAdapter.swapCursor(newCursor)的方法,这就完成了。但是如果清除和添加所有工作,那么它工作:)我可能会尝试一种方法,只更新文章之间的增量,而不是所有文章之间的增量。。。