【问题标题】:findViewById retrurns wrong element?findViewById 返回错误的元素?
【发布时间】:2023-04-01 09:10:01
【问题描述】:

我不明白为什么 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

所以重点是,为什么我得到一个 id 为 R.id.tuxtView2 的 imageview 和一个 id 为 R.id.imageView1 的 textview。如果我想为 R.id.tuxtView2 分配一个文本值,应用程序会崩溃,并转换为 TextView。

【问题讨论】:

  • 尝试重新加载您的项目,可能是 R.java 出了问题,或者验证您正在使用 setContentView 调用正确的文件。
  • 有据可查的问题。抱歉,不知道为什么会这样。
  • @JeremyD,哇,我什么都试过了,几个小时,除了重新启动 Eclipse。我重新启动了eclipse,它突然又开始工作了。我以为我在代码中做错了什么。将其发布为答案,我会投票支持您+将其标记为已解决。谢谢!
  • 当 Eclipse 混合了 R.java 中的所有 id 时,有时您需要“清理”您的项目
  • @jonepatr 是的,有时日食有点愚蠢:D

标签: android android-layout android-imageview textview findviewbyid


【解决方案1】:

尝试重新加载您的项目,可能是 R.java 出了问题,或者验证您正在使用 setContentView 调用正确的文件。

通过刷新/清理您的项目,将重新加载 R.java 文件并找到命名的小部件。

【讨论】:

  • 我只是捎带这个答案,因为你是正确的,但我会补充一点,删除我的 /gen 文件夹的内容是解决非常类似问题的唯一方法。
  • 谢谢!当 Google 的代码声称“1 == 2”时,这非常可怕;)
  • 注意:不要像我一样删除你的 /gen 文件夹——小心只删除它的内容。如果您删除整个内容,它会暂时破坏 ADT(但您会收到一个错误,告诉您如何修复它,这很好),但会永久破坏 SVN(如果您使用的是 SVN)。啊。唯一的解决方案是“还原”SVN 中的文件夹。
  • 奇怪,但我重命名了我的 id(在 XML,而不是 GUI 视图中,然后修复了显示错误的名称)。它为我修复了错误。令人震惊的是,Google 仍然无法修复这些恼人的错误。
【解决方案2】:

我复制了您的代码并制作了一个虚拟应用程序。我得到了这些结果:

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

显然代码没有问题

【讨论】:

  • 谢谢,除了重启 eclipse 外,我什么都试过了,结果是问题的根源。感谢您抽出宝贵时间:)
  • 没问题。下次您可以尝试右键单击您的项目并选择 Android Tools->Fix Project Properties 或进入 Eclipse 栏 Project->Clean Project
【解决方案3】:

我在这里几乎尝试了所有方法,但在我向 Activity 添加一个新组件并在运行后发现新组件没有显示之前,没有任何效果。它表明我的应用程序没有随着运行而更新。它通过手动卸载旧版本的应用程序然后再次运行来工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多