2014-02-06 44 views
2

我試圖讓列表視圖在運行時高度適合項目高度的屏幕。列表視圖高度僅爲第一項返回零

這裏是我的代碼:我getView()

int totalHeight = activity.getListView().getHeight(); 
      int rowHeight = totalHeight/getCount(); // Divide by number of items. 
      activity.getListView().setScrollContainer(false); 
      activity.getListView().setVerticalScrollBarEnabled(false); 
      convertView.setMinimumHeight(rowHeight); 

在我的活動我已經創造了編程列表查看與寬度和高度爲MATCH_PARENT。

但我試圖調試,發現僅在第一個項目列表視圖高度爲0,但其給我適當的高度項目的其餘部分。

爲什麼這麼 ?如何解決這個問題?

回答

2

這很可能是由於該視圖尚未創建。在這種情況下,高度將是0

您可以使用類似拿到視線的高度:

final ListView listView = activity.getListView(); 
ViewTreeObserver vto = listView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 
     int totalHeight = listView.getHeight(); 
     int rowHeight = totalHeight/getCount(); // Divide by number of items. 
     listView.setScrollContainer(false); 
     listView.setVerticalScrollBarEnabled(false); 
     convertView.setMinimumHeight(rowHeight); 

     ViewTreeObserver obs = listView.getViewTreeObserver();  
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
      obs.removeOnGlobalLayoutListener(this); 
     } else { 
      obs.removeGlobalOnLayoutListener(this); 
     } 
    } 

}); 

原因檢查Build.VERSION是,在SDK果凍之前Bean的名字方法不同(OnGlobalLayout vs GlobalOnLayout)

+0

我需要在哪裏添加這個?裏面getView() – user2056563

+0

什麼是電視這裏?爲什麼這個if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.JELLY_BEAN)在這裏?並且我也不能在onGlobalLayout – user2056563

+0

裏面設置convertview你是在做一個片段還是一個活動? – maclir

0

這是因爲當第一項getView被稱爲listview的高度未確定。

你需要使用ViewTreeObserver給你佈局變化的事件,並在這你可以得到的高度。