我想测量ListView的高度(getHight()= 0)

时间:2012-08-03 12:35:32

标签: android android-listview

我无法自己决定要求

我想测量ListView的高度。无法捕捉到呈现ListView(rssListView.getHight(); = 0)

的那一刻
public class RSSactivity extends Activity {

    public static RssItem selectedRssItem = null;
    String feedUrl = "";
    ListView rssListView = null;
    ArrayList<RssItem> rssItems = new ArrayList<RssItem>();
    ArrayAdapter<RssItem> aa = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        rssListView = (ListView) findViewById(R.id.rssListView);
        aa = new ArrayAdapter<RssItem>(this, R.layout.list_item, rssItems);
        rssListView.setAdapter(aa); 
        feedUrl = rssURLTV.getText().toString();
        refressRssList();
        rssListView.getWidth(); // = 0 ,    
    }

    private void refressRssList() {

        ArrayList<RssItem> newItems = RssItem.getRssItems(feedUrl);
        rssItems.clear();
        rssItems.addAll(newItems);
        aa.notifyDataSetChanged();

    }

}

目标计算中间ListView屏幕的项目数

4 个答案:

答案 0 :(得分:13)

on onCreate:

rssListView.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
        // If you need this to be called again, then run again addOnGlobalLayoutListener.
        mainPanel.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        rssListView.getWidth(); // It's available here.
      }
    });

答案 1 :(得分:0)

为什么你需要Listview的高度()?如果你想检查空的Listview,那么你可以使用setEmptyListview()。

答案 2 :(得分:0)

您可以使用尺寸方法测量列表视图的高度。

rssItems.size();

希望它对你有所帮助。

答案 3 :(得分:-2)

当调用onCreate方法时,屏幕未加载,因此每个布局组件都有height = 0和width = 0.如果您想知道高度或宽度,请在加载屏幕之前执行此操作。我使用的方法是创建一个开始在onCreate上运行的线程。线程请求布局对象高度,而它是0我知道屏幕组件尚未加载。当高度大于0时,我向UI线程提交我想要执行的任务。

编辑:尝试在onStart方法中获取高度,但我不确定屏幕是否已加载。

一些代码示例:

public void onCreate(Bundle savedBundle){
    super.onCreate(savedBundle);
    setContentView(R.layout.main);
    final ListView lv = (ListView) findViewById(R.id.my_list_view);
    Thread thr = new Thread(new Runnable(){
        public void run(){
            while(lv.getHieght() <= 0){
                try{
                    Thread.sleep(10);
                } catch(Exception e) {
                }
            }   //while ends
            final int height = lv.getHight();
            MyActivity.this.runOnUiThread(new Runnable(){
                public void run(){
                    myMethod(height);
                } //UI thread runnable-run method ends
            }); //UI Runnable declaration ends
        } //thread runnable-run method ends
    }); //Thread Runnable declaration ends
    thr.start();
} // onCreate ends.


public void myMethod(int height){
    //opeate with valid height
}