使用 findViewById() 找不到视图

Posted

技术标签:

【中文标题】使用 findViewById() 找不到视图【英文标题】:Can not find a View with findViewById() 【发布时间】:2011-10-09 08:02:54 【问题描述】:

即使 ID 确实存在,我也无法通过调用 findViewById() 找到 TextView

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_
  android:layout_>

<TextView 
    android:id="@+ID/txt02"
    android:layout_
    android:layout_
/>

<Button 
    android:id="@+ID/otherActivity_Btn"
    android:layout_
    android:layout_
/>
</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为空?

【问题讨论】:

尝试调用 setContentView(R.layout.other_activity);就在 onCreate 的 super.onCreate(savedInstance) 调用 onCreate... 我不确定“ID”是否可以在这里大写。 android:id="@+ID/otherActivity_Btn" 我觉得 Andro_selva 是正确的 TextView 中的“id” textView = (TextView)findViewById(R.ID.txt02);不能大写 【参考方案1】:

在尝试查找任何 UI 组件之前,您必须致电 setContentView(...)。您试图在调用之前找到TextView

把你的代码改成这个...

super.onCreate(savedInstanceState);
setContentView(R.layout.other_activity);
TextView textView = (TextView)findViewById(R.id.txt02);

【讨论】:

在这个问题上浪费了我五个小时 :(。你救了我【参考方案2】:

更改您的代码,例如 ::

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

没有像“ID”这样的大写字母

主要:

 <TextView android:id="@+id/txt02" android:layout_
    android:layout_ />

【讨论】:

【参考方案3】:

我实际上只是遇到了这个问题,它是由现在自动检查构建引起的。只需手动构建您的项目或单击自动构建即可解决您的问题!

【讨论】:

这个问题是怎么自动构建的?【参考方案4】:

您必须确保在创建 Activity 时已经生成了 TextView 元素。

如果它是一个 Menu 元素,您将不得不在 onCreateOptionsMenu() 回调而不是 Oncreate() 回调上调用 findViewById 方法。

【讨论】:

以上是关于使用 findViewById() 找不到视图的主要内容,如果未能解决你的问题,请参考以下文章

错误:找不到符号方法 findViewById(int) [重复]

空指针异常 - findViewById()

findViewById(R.id.btn_first) 给写成 R.layout.

获取视图的角半径值

macbook苹果电脑Wi-Fi感叹号,无法打开Wi-Fi选项,网络偏好设置里找不到Wi-Fi设置?

ListView空视图不会显示