1

主要的.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>

主页.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");

这将导致空指针异常。

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

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

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

谢谢

4

2 回答 2

1

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

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

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

于 2012-07-07T17:23:18.443 回答
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);

我希望它会帮助你...

于 2012-07-07T17:33:15.480 回答