Fragment内のViewのwidthがなぜか0のときの対応方法
ViewTreeObserverを使ってOnGlobalLayoutListenerで引っ掛ける。
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ViewTreeObserver observer = mImageView.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { setImage(); } }); } private void setImage() { Bitmap bitmap; try { File file = new File(mPhoto.getImagePath()); Uri uri = Uri.fromFile(file); bitmap = FileManager.decodeUri(getActivity().getContentResolver(), uri, mImageView.getWidth()); mImageView.setImageBitmap(bitmap); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); } }
OnGlobalLayoutListenerが引っかかり過ぎやしないかと思ったけど、アプリ起動→表示までの単純なフローでは2回しか呼ばれなかった。