在不同的xml中查找textview

时间:2012-07-07 16:58:03

标签: android

main.xml中

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

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

</LinearLayout>

home.xml

 <TextView
 android:id="@+id/gpsStatus"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 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");

这将导致nullpointerexception。

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

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

那么我如何查找和操作不在我的main.xml

中的控件

由于

2 个答案:

答案 0 :(得分:1)

这是因为当您调用findViewById时,主活动中不存在home.xml。将home.xml布局文件扩展到主活动后,findViewById应该可以正常工作。

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

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

答案 1 :(得分:1)

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

在main.xml中

<LinearLayout 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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);

我希望它能帮到你......