まず第一に、はい、私はこのトピックに関する他のスレッドをすべて読みました。このサイトのものだけではありません... (おわかりですね、私は少しイライラしています)
ほとんどの場合、 XML ファイル内ではandroid:id
なく、代わりに使用するためのアドバイスが付属しています。私はそうしました。id
他の人から、 はView.findViewById
とは異なる動作をすることを知りましたActivity.findViewById
。私もそれを処理しました。
私の ではlocation_layout.xml
、以下を使用します:
<FrameLayout .... >
<some.package.MyCustomView ... />
<LinearLayout ... >
<TextView ...
android:id="@+id/txtLat" />
...
</LinearLayout>
</FrameLayout>
私のアクティビティでは次のことを行います:
...
setContentView( R.layout.location_layout );
そして私のカスタムビュークラスでは:
...
TextView tv = (TextView) findViewById( R.id.txtLat );
を返しますnull
。これを行うと、アクティビティは正常に動作します。おそらく、Activity.findViewById
と のView.findViewById
違いが原因だと思います。そこで、カスタム ビュー コンストラクターに渡されたコンテキストをローカルに保存して、次の操作を試しました。
...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );
これも返されましたnull
。
ViewGroup
次に、カスタム ビューを拡張するように変更しView
、をカスタム ビューの直接の子にするlocation_layout.xml
ように変更して、 が想定どおりに動作するようになりました。驚いたことに、何も解決しませんでした。TextView
View.findViewById
それで、私は一体何を間違っているのでしょうか?
コメントをいただければ幸いです。
ベストアンサー1
nullを返す
おそらく、あまりにも早く電話をかけすぎたためでしょう。 までお待ちくださいonFinishInflate()
。サンプルプロジェクトはこちらView
コンテンツにアクセスするカスタムを示します。