2015-06-05 101 views
-1

当点击我有一个ViewTreeObserver,我想点击按钮,并重新加载此的ListView 这是我viewTreeObserver代码:安卓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; 
      } 
     }); 

和按钮,当我点击我要获取新的文章列表并重新加载这个ListView再次与新的arrayList。我怎样才能做到这一点?

注意,文章

MyApplication.articles =在ArrayList中点击我把这个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){ 

       } 
    } 

} 
+0

这是没有办法的办法做到这一点。为什么你需要每次创建新的适配器onGlobalLayout()被调用?为什么不在onClick()上添加notifiyDataChanged()? – EE66

+0

我刚刚在onClick上添加了notifyDataChanged,但仍显示旧的arrayList – Malo

+0

代码的问题在这里。附加更多代码。 onClick()还有什么?你是否下载更多的数据?添加/删除?为什么你需要再次加载列表?附加更多的代码和帮助你。 – EE66

回答

0

的问题是你没有改变适配器上的数据。 应该有一个集合适配器上的数据的方法。

MyApplication.articles = p;

adapter.setData(p);

adapter.notidyDataSetChanged();

像这样

+0

你的意思'adapter.clear(); adapter.addAll(P); adapter.notifyDataSetChanged();'和它的工作:D ..谢谢 – Malo

+0

它已经有一段时间了,因为我使用了一个带有数据而不是CursorAdapter的适配器。在CursorAdapter中,你有一个名为cursorAdapter.swapCursor(newCursor)的方法,它可以做到这一点。但如果清除并addAll工作,然后它工作:) 我会尝试也许只是更新文章之间的差异,而不是所有的文章... – EE66