findViewByID は null を返します 質問する

findViewByID は null を返します 質問する

まず第一に、はい、私はこのトピックに関する他のスレッドをすべて読みました。このサイトのものだけではありません... (おわかりですね、私は少しイライラしています)

ほとんどの場合、 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ように変更して、 が想定どおりに動作するようになりました。驚いたことに、何も解決しませんでした。TextViewView.findViewById

それで、私は一体何を間違っているのでしょうか?

コメントをいただければ幸いです。

ベストアンサー1

nullを返す

おそらく、あまりにも早く電話をかけすぎたためでしょう。 までお待ちくださいonFinishInflate()サンプルプロジェクトはこちらViewコンテンツにアクセスするカスタムを示します。

おすすめ記事