В первую очередь: да, я считал все другие потоки по этой теме. И не только те, которые от этого сайта... (Вы видите, я немного расстроен),
Большинство из них идет с советом использовать 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: это ничего не решило.
Таким образом, какого черта я делаю неправильно?
Я буду ценить любые комментарии.
, которая возвращает null
Возможно, потому что вы вызываете ее слишком рано. Подождите, пока onFinishInflate ()
. Вот пример проекта , демонстрирующего настраиваемый View
доступ к его содержимому.