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
?
由于
答案 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);
我希望它能帮到你......