パズル~~~奇妙な問題に遭遇しました。これは私のアクティビティの初期化であり、gridView は getView() メソッドを呼び出してその中のすべてのアイテムを初期化します。しかし、私はイベントを行っておらず、画面に触れたこともありませんが、グリッドビューは実際に最初の位置から最後まで画像をロードします. これが私のログです:
D/LocalGridViewAdapter(20843): getView() called at :0
D/LocalGridViewAdapter(20843): getView() called at :0
D/LocalGridViewAdapter(20843): getView() called at :1
D/LocalGridViewAdapter(20843): getView() called at :2
D/LocalGridViewAdapter(20843): getView() called at :3
D/LocalGridViewAdapter(20843): getView() called at :4
.....................................
D/LocalGridViewAdapter(20843): getView() called at :564
D/LocalGridViewAdapter(20843): getView() called at :565
これは ViewTreeObserver が原因だと思っていましたが、gridview アイテムのレイアウトをリサイズして画像をより美しく見せるために必要です。これが私の ViewTreeObserver のコードです。Google bitmapFun Projext からのものです。
gv.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (mAdapter.getNumColumns() == 0) {
final int numColumns = (int) Math.floor(gv.getWidth()
/ (GlobalConstants.mImageThumbSize
+ GlobalConstants.mImageThumbSpacing));
if (numColumns > 0) {
final int columnWidth = (gv.getWidth() / numColumns)
- GlobalConstants.mImageThumbSpacing;
GlobalConstants.reqSize = columnWidth;
mAdapter.setNumColumns(numColumns);
mAdapter.setItemHeight(columnWidth);
Log.d("~~~~~~~~~~~",
"onCreateView - numColumns set to " + numColumns);
}
}
}
});
なぜBitmapfunが大丈夫なのか疑問に思いますか? それはうまくいきますが、私のプロジェクトはうまくいきません。