findViewById возвращает неправильный элемент? - PullRequest
14 голосов
/ 27 декабря 2011

Я не могу понять, почему findViewById возвращает неправильный элемент, вот класс:

public class EventDetailsFragment extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.event_details);
        Log.d("First", findViewById(R.id.tuxtView1).getClass().toString());
        Log.d("Second", findViewById(R.id.tuxtView2).getClass().toString());
        Log.d("Third", findViewById(R.id.imageView1).getClass().toString());
    }   
}

А вот и xml:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/green"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp">

    <RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="0dp"
    android:layout_height="175dp"
    android:layout_gravity="center_horizontal"
    android:layout_weight="1"
    android:background="#fff"
    android:gravity="right" >

        <ImageView
        android:id="@+id/imageView1"
        android:layout_width="110dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:src="@drawable/ic_event_image" />

        <TextView
        android:id="@+id/tuxtView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="10dp" />      
        <TextView
        android:id="@+id/tuxtView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tuxtView2"
        android:layout_toRightOf="@+id/imageView1"
        android:textColor="#555"
        android:textSize="20dp" />

    </RelativeLayout>

</LinearLayout>

Выход logcat:

12-26 23:43:20.249: D/First(6789): class android.widget.TextView
12-26 23:43:20.249: D/Second(6789): class android.widget.ImageView
12-26 23:43:20.249: D/Third(6789): class android.widget.TextView

Итак, почему я получаю изображение с идентификатором R.id.tuxtView2 и текстовое представление с идентификатором R.id.imageView1. Приложение аварийно завершает работу, если я хочу присвоить текстовое значение R.id.tuxtView2, приведенному как TextView.

Ответы [ 3 ]

21 голосов
/ 27 декабря 2011

Попробуйте перезагрузить ваш проект, возможно, что-то не так с R.java, или убедитесь, что вы вызываете хороший файл с помощью setContentView.

При обновлении / очистке вашего проекта файл R.java будет перезагружен и будетнайти названные виджеты.

2 голосов
/ 27 декабря 2011

Я скопировал твой код и сделал фиктивное приложение.Я получил эти результаты:

12-27 00:03:48.332: D/First(9165): class android.widget.TextView
12-27 00:03:48.332: D/Second(9165): class android.widget.TextView
12-27 00:03:48.332: D/Third(9165): class android.widget.ImageView

Видимо, нет ничего плохого с кодом

0 голосов
/ 01 марта 2017

Я попробовал почти все здесь, но ничего не получалось, пока я не добавил новый компонент в действие и, после запуска, заметил, что новый компонент не отображается.Это предположило, что мое приложение не обновлялось с запусками.Он работал, вручную удаляя старую версию приложения и затем снова запускаясь.

...