findViewByID возвращает пустой указатель

В первую очередь: да, я считал все другие потоки по этой теме. И не только те, которые от этого сайта... (Вы видите, я немного расстроен),

Большинство из них идет с советом использовать android:id вместо просто id в XML-файле. Я сделал.

От других я учился, это 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 должен работать, как предполагается. Suprise: это ничего не решило.

Таким образом, какого черта я делаю неправильно?

Я буду ценить любые комментарии.

237
задан Swati Garg 14 October 2018 в 23:32
поделиться

1 ответ

, которая возвращает null

Возможно, потому что вы вызываете ее слишком рано. Подождите, пока onFinishInflate () . Вот пример проекта , демонстрирующего настраиваемый View доступ к его содержимому.

254
ответ дан 23 November 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: