在不同的xml中查找textview
Posted
技术标签:
【中文标题】在不同的xml中查找textview【英文标题】:Find textview in different xml 【发布时间】:2012-07-07 18:47:12 【问题描述】:main.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的主要内容,如果未能解决你的问题,请参考以下文章