12

重複の可能性:
Android: notifyDataSetChanged と getLastVisiblePosition を使用 - listView が実際に更新されるのはいつですか?

いくつかのエントリしかない単純な ListView があります。デバイスのサイズと向きに応じて、ListView をスクロールする必要があります。

画面には写真も表示されますが、これは実際には必要ありません。スクロールせずに ListView に十分なスペースがない場合は、画像を削除したいと思います。

アクティビティの onCreate で ListView を入力すると、getLastVisiblePosition() はまだ有効ではなく、-1 が返されます。したがって、最後に表示されたアイテムをリスト数と比較することはできません。

int lastVisiblePos = listView.getLastVisiblePosition(); // -1 を返す

(後でボタンをクリックして再確認すると、値は正しいです。)

onScrollingListener を使用するのは遅すぎます。そもそも画像を表示してはならないからです。

APIレベル10で開発しています。

助言がありますか?

4

2 に答える 2

22

Runnable と比較getLastVisiblePosition()getCount()て、描画された直後に ListView 全体が画面に収まるかどうかを確認します。また、表示されている最後の行が画面全体に収まるかどうかも確認する必要があります。

ランナブルを作成します。

ListView listView;
Runnable fitsOnScreen = new Runnable() {
    @Override
    public void run() {
        int last = listView.getLastVisiblePosition();
        if(last == listView.getCount() - 1 && listView.getChildAt(last).getBottom() <= listView.getHeight()) {
            // It fits!
        }
        else {
            // It doesn't fit...
        }
    }
};

ListView の Handler で Runnable をキューにonCreate()入れます。

listView.post(fitsOnScreen);
于 2012-11-26T21:07:25.260 に答える
0

なぜ問題を探しているのですか?アイデアの代わりに、3 つのレイアウトを使用できます。

  1. 必要に応じてウィジェット - ヘッダー
  2. ListView - メイン レイアウト
  3. ImageView またはその他のウィジェット - フッター


ListView lv = (ListView) findViewById(R.id.listView);
View header = getLayoutInflater().inflate(R.layout.header_layout, null);
View footer = getLayoutInflater().inflate(R.layout.foorer_layout, null);
lv.addHeaderView(headerComment);
lv.addFooterView(footerComment);
于 2012-11-26T21:02:58.030 に答える