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画面に干渉する項目数を計算する対象

4

4 に答える 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.
      }
    });
于 2012-08-03T13:01:45.760 に答える
0

Listview の Height() が必要な理由 空のリストビューを確認したい場合は、setEmptyListview() を使用して行うことができます。

于 2012-08-03T12:44:46.873 に答える
0

size メソッドを使用して、リストビューの高さを測定できます。

rssItems.size();

お役に立てば幸いです。

于 2012-08-03T13:04:07.870 に答える
-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
}
于 2012-08-03T12:49:11.137 に答える