2

わかりましたので、これを行います(実際のコードではありません)

try {
    final View view = LayoutInflater.from(context).inflate(R.layout.ownComponent, null);
} catch (InflateExpection e) {
}

if (view != null) {
    // This child is null about 5/10 times!

    View child = view.findViewById(R.id.ownComponentChild);
}

膨らませた後、子ビューが膨らむことが保証されていないことを読んだので、すべての子の準備ができたときにコールバックを取得する適切な方法は何でしょうか?

4

2 に答える 2

1

あなたがやろうとしていることを誤解しているかもしれませViewんが、レイアウトではなくaを膨らませているようです...

試す

View view = LayoutInflater.from(context).inflate(R.layout.LAYOUT_THAT_HOLDS_ownComponent, this, true);

ビューにはレイアウト全体が保持され、そこから Id で子を見つけることができます

view.findViewById(...);

編集:

十分なコードを投稿していないため、関連しているかどうかを判断するのは難しいですが、これを試してください: View viewtry/catch を取得して、クラス メンバーとして配置します。ファイナルを失い、子供をキャストします。

例 (ownComponentChild が FrameLayout であると仮定):

FrameLayout child = (FrameLayout)view.findViewById(R.id.ownComponentChild);

于 2012-05-09T11:05:47.680 に答える
0

これはランダムに発生するように見えるので、この場合はメモリが不足していると推測されます。これを再現するには、非常に多くの UI コンポーネントをすばやく再作成する必要があるためです。

于 2012-08-01T04:41:09.430 に答える