2015-06-05 99 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