2013-05-23 2 views
-1

У меня есть textView, который ищет findViewById и который продолжает возвращать Null. У меня есть setContentView в onCreate класса, который указывает на макет, отличный от той, которая содержит мой textView. Как вернуть его null null, пожалуйста?findViewById() возвращает Null, Why?

ниже моей деятельности и два файла XML:

activity_process.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/content_process" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

.

<TextView 
       android:id="@+id/enrollmenttype" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:padding="10dp" 
       android:text="@string/enrollmenttype_value" /> 

.

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_process); 

Я не могу редактировать activity_process.xml, поскольку это скрытая активность. Мне нужно найти способ преодолеть все это.

+1

этот код дает вам исключение? –

+1

ниже - моя активность и два файла xml: вы должны поместить TextView внутри макета, чтобы передать параметр ParamountView. Итак, ваш TextView должен находиться внутри activity_process.xml – Blackbelt

+0

@AsierAranbarri, возможно, NPE? – Blackbelt

ответ

2

Способ findViewById предоставит вам только виды, которые находятся под макетом, установленным с помощью setContentView. Почему вы пытаетесь получить TextView из макета, который ваша деятельность не использует? Это неправильно во всех отношениях.

Так, для того, чтобы работать, вы должны положить, что TextView в activity_process.xml так:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content_process" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
      android:id="@+id/enrollmenttype" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:padding="10dp" 
      android:text="@string/enrollmenttype_value"> 
    </TextView> 
</LinearLayout> 
+1

Согласен, вы должны спросить себя, почему вы пытаетесь это сделать. Возможно, объясните, что вы пытаетесь достичь в своем вопросе. – Emile

+0

Я не могу редактировать activity_process.xml, он скрыт. и мой текст не будет отображаться в конечном представлении ... это более сложная организация макетов. – DrDree

1

findViewById возвращает ссылку на дочерние компоненты текущего назначенного представления. I.e вид, который вы подключили, используя setContentView().

Таким образом, если вы назначили контент из файла, отличного от указанных вами двух, вы действительно получите нуль.

FindViewByID возвращает компоненты текущего назначенного представления. Не компоненты из других файлов, которые могут быть у вас в приложении.

Прежде чем вы сможете ссылаться на findViewById, вам нужно будет сначала прикрепить свое текстовое поле.

Чтобы создать представление из других xml-файлов, вы можете использовать развёртывание макета. Затем вы можете добавить это расширенное представление в свой существующий макет. Вам нужно будет посмотреть, как использовать макетные инфляторы.

+0

Как использовать раздувание пожалуйста? – DrDree

2

Просмотров должны быть созданы, прежде чем вы можете изменить их. Способ их создания - через setContentView(), где макет представления раздувается (т. Е. Представления из xml записываются на экран и созданные объекты). Представление не существует, если оно отсутствует на экране, вы не сможете его найти или изменить его параметры. Я могу сказать, что вы пытаетесь достичь, обновив TextView, когда он не существует, может быть сделано после того, как XML, содержащий ваш TextView, завышен.

0

Вы можете раздуть текстовое изображение динамически и добавить его в свой основной макет по мере необходимости. Я так думаю, что это сработает.

Смежные вопросы