Не удается найти представление с помощью findViewById () - PullRequest
5 голосов
/ 20 июля 2011

Я не могу найти TextView, вызвав findViewById(), даже если идентификатор существует.

OtherActivity:

public class OtherActivity extends Activity { 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        TextView textView = (TextView)findViewById(R.ID.txt02);
        super.onCreate(savedInstanceState);//line 5
        setContentView(R.layout.other_activity);
        //textView.setText(ACCESSIBILITY_SERVICE);
        Button button = (Button)findViewById(R.ID.otherActivity_Btn);
        button.setText(R.string.otherActivityBtn);
        button.setOnClickListener(new GoBackBtnListener(this));
    }

    class GoBackBtnListener implements OnClickListener {
        OtherActivity other = null;
        public GoBackBtnListener(OtherActivity p_other) {
            other = p_other;
        }
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setClass(other, Activity01Activity.class);
            other.startActivity(intent);
        }
    }
}

Я добавил точку останова в строке 5,и запустил проект в режиме отладки.Когда он остановился в точке останова, я переместил мышь к переменной textView, и она стала нулевой.

Макет other_activity:

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

<TextView 
    android:id="@+ID/txt02"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

<Button 
    android:id="@+ID/otherActivity_Btn"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>
</LinearLayout>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hp" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".Activity01Activity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity" android:label="@string/other"></activity>
    </application>
</manifest>

Сгенерированный R.java класс:

public final class R {
    public static final class ID {
        public static final int Activity01_btn=0x7f050001;
        public static final int otherActivity_Btn=0x7f050003;
        public static final int txt01=0x7f050000;
        public static final int txt02=0x7f050002;
    }
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
        public static final int other_activity=0x7f030001;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
        public static final int other=0x7f040002;
        public static final int otherActivityBtn=0x7f040003;
    }
}

Не думаю, что TextView не должен быть найден, но почему переменная textView null?

Ответы [ 4 ]

15 голосов
/ 20 июля 2011

Вам нужно позвонить setContentView(...) ДО того, как вы попытаетесь найти какой-либо из компонентов пользовательского интерфейса.Вы пытаетесь найти TextView, прежде чем позвонить.

Измените свой код на этот ...

super.onCreate(savedInstanceState);
setContentView(R.layout.other_activity);
TextView textView = (TextView)findViewById(R.id.txt02);
4 голосов
/ 20 июля 2011

измените свой код как ::

  TextView textView = (TextView)findViewById(R.id.txt02);

Там нет заглавной буквы, как "ID"

Main:

 <TextView android:id="@+id/txt02" android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
1 голос
/ 08 июня 2016

Вы должны убедиться, что ваш элемент TextView уже создан при создании вашей деятельности.

Скорее всего, если это элемент Menu, вам придется вызывать метод findViewById для обратного вызова onCreateOptionsMenu (), а не для обратного вызова Oncreate ().

1 голос
/ 13 декабря 2013

У меня просто была эта проблема, она была вызвана тем, что билд автоматически проверялся.Просто создайте свой проект вручную или нажмите «Автоматически», и это решит вашу проблему!

...