嵌套的findViewById

时间:2012-09-21 16:54:33

标签: java android android-layout android-xml findviewbyid

我在使用LinearLayout

中的相对布局内访问TextView时遇到此问题

假设我在文件row.xml中有这些视图

<LinearLayout>
    <TextView android:id="@+id/title" />
    <RelativeLayout android:id="@+id/a_parent">
        <TextView android:id="@+id/a">
    </RelativeLayout>
    <RelativeLayout android:id="@+id/b_parent">
        <TextView android:id="@+id/b">
    </RelativeLayout>
</LinearLayout>

现在我想从活动中更改TextViews的值

LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout temp=(LinearLayout) li.inflate(R.layout.row, null);
((TextView)temp.findViewById(R.id.title)).setText("This is title");
RelativeLayout rl=(RelativeLayout)temp.findViewById(R.id.a_parent);
((TextView)rl.findViewById(R.id.a)).setText("an this is the content of a");

我可以成功设置id'title'的TextView,但是当接近最后一行时会出现错误。它说错误是由android.content.res.Resources $ NotFoundException引起的:字符串资源ID#0x1

任何人都可以告诉我出了什么问题,如何修复它,以及为什么代码不能像我预期的那样工作?

由于

3 个答案:

答案 0 :(得分:3)

您的异常是String的ResourcesNotFoundException。您是否使用getString设置TextView的值?如果是这样,您确定string.xml文件中存在此字符串吗?如果没有,您是否可以使用R.string.name而不是R.id.name来引用您的一个观点?看起来您修改了发布的代码,如果您准确地发布了原始内容以及完整堆栈跟踪,则可能更容易提供帮助。

有时出现资源问题,因为R文件不是新代码的最新版本。我也会尝试重建/清理你的项目,看看是否有帮助。

答案 1 :(得分:1)

通常,当您尝试在Textview中设置整数值时会出现此错误  如下所示:

   textview.setText(1);

在这种情况下,android会认为整数值为字符串资源id并检查  字符串strings.xml并抛出Resources $ NotFoundException。 请检查您的代码。如果没有发布必要的代码和logcat输出。

答案 2 :(得分:0)

   LinearLayout temp=(LinearLayout) li.inflate(R.layout.row....

在您的XML文件中,LinearLayout未声明“android:id”属性。