在不同的xml中查找textview

Posted

技术标签:

【中文标题】在不同的xml中查找textview【英文标题】:Find textview in different xml 【发布时间】:2012-07-07 18:47:12 【问题描述】:

ma​​in.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical"
android:padding="10dp"
android:background="@drawable/gradientbg" >

<android.support.v4.view.ViewPager
android:layout_
android:layout_
android:id="@+id/viewPager"/>

</LinearLayout>

home.xml

 <TextView
 android:id="@+id/gpsStatus"
 android:layout_
 android:layout_
 android:layout_marginTop="10dp"
 android:layout_marginRight="10dp"
 android:layout_marginBottom="10dp"
 android:layout_marginLeft="2dp" />

我的主要活动

TextView gpsStatus = (TextView)findViewById(R.id.gpsStatus); // gpsStatus = null
gpsStatus.setText("foo");

这将导致空指针异常。

LayoutInflater inflater = getLayoutInflater();
View homeView = inflater.inflate(R.layout.home, null);
TextView gpsStatus = (TextView)homeView.findViewById(R.id.gpsStatus);
gpsStatus.setText("foo");

这不会使代码崩溃,但也不会改变我的文本。

那么我该如何查找和操作不在我的main.xml 中的控件?

谢谢

【问题讨论】:

@user370305 .ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView 您的 Home.xml 文件包含更多视图还是仅包含 TextView? @user370305 带有文本视图的线性布局。 好的,那么当您尝试更改 TextView 的文本时,现在显示的是哪个 Activity? TextView 在屏幕上可见吗? @user370305 是的,它通过ViewPager 可见。但它是通过显示的main.xml,我认为这就是问题所在。 mobile.tutsplus.com/tutorials/android/… 【参考方案1】:

So how do i find and manipulate controls that arent located in my main.xml?

在 main.xml 中

<LinearLayout 
android:layout_
android:layout_
android:id="@+id/aLyoutWillbeAddedIfruqired"
 >
</LinearLayout>

在你的活动中做类似...

LinearLayout statusLayout= (LinearLayout )findViewById(R.id.aLyoutWillbeAddedIfruqired);

LayoutInflater inflater = getLayoutInflater();
View homeView = inflater.inflate(R.layout.home, null);
TextView gpsStatus = (TextView)homeView.findViewById(R.id.gpsStatus);
gpsStatus.setText("foo");
statusLayout.addView(homeView);

希望对你有帮助……

【讨论】:

【参考方案2】:

这是因为当您调用 findViewById 时,您的主活动中不存在 home.xml。一旦你的 home.xml 布局文件膨胀到你的主要活动中,findViewById 应该可以工作。

findViewById 仅适用于当前视图层次结构下的 ID。通过在您的膨胀视图上调用 findViewById,您正在检查您创建的布局对象上的视图层次结构。

如果您将 home.xml 布局添加到主活动内的视图中,它将被添加到您的活动的视图层次结构中,然后您的 findViewById 和 setText 调用将起作用。

【讨论】:

好的,我如何将它添加到我的主要活动中的视图中? 有很多不同的方法。您可以直接将 home.xml 包含到您的 main.xml 布局中(请参阅 developer.android.com/training/improving-layouts/… 或 ***.com/questions/8834898/…)。或者,您可以使用布局充气器来充气视图,然后将其添加到视图组。 另外,您也可以使用 PagerAdapter 将您的视图加载到您的 ViewPager 中。详情请见developer.android.com/reference/android/support/v4/view/…。 附加问题:我如何知道 home.xml 何时膨胀?在创建MyPagerAdapter 的实例之后检查它似乎还不够。这是我使用的代码:mobile.tutsplus.com/tutorials/android/…

以上是关于在不同的xml中查找textview的主要内容,如果未能解决你的问题,请参考以下文章

使用 xslt 1.0 从两个不同的父标签中查找不同的元素

使用 Python 在 XML 中查找和替换值

xml

XPath注入

如何使用 XSL 在 XML 转换中查找随机元素

XPATH 帮助:使用 XPathNodeIterator 在命名空间中查找 XML 节点