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

5

我无法决定任务,需要询问

我想测量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屏幕中间可以显示的物品数量


获取ListView的高度有什么目的? - moDev
感谢您的提问。目标是计算ListView屏幕中间的项目数量。 - Max Usanin
你可以直接测量ListView项的大小,rssItems.size(); - moDev
4个回答

13

在 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.
      }
    });

类型为new ViewTreeObserver.OnGlobalLayoutListener(){}的方法onGlobalLayout()必须覆盖超类方法。 - Max Usanin

0
为什么需要 Listview 的 Height() 函数?如果您想检查空的 Listview,可以使用 setEmptyListview() 函数。

https://dev59.com/KFjUa4cB1Zd3GeqPU9I- - lakhani

0
您可以使用size方法来测量ListView的高度。

rssItems.size();

希望它能对你有所帮助。


-2

当onCreate方法被调用时,屏幕尚未加载,因此每个布局组件的高度=0,宽度=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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接