我无法自己决定要求
我想测量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屏幕的项目数
答案 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
}