viewstub加载后,它的id变得不可用
如果填充的布局有自己的id,则可使用此id
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".stub.StubActivity">
//填充viewstub
<Button
android:id="@+id/inflate_vs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="inflate" />
//检查viewstub是否为空
<Button
android:id="@+id/check_viewstub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="checkvs" />
//检查textview(viewstub填充后的控件)是否为空
<Button
android:id="@+id/check_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="checktv" />
//检查结果在此显示
<TextView
android:id="@+id/debug_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/holo_red_dark"
android:text="test:"/>
<ViewStub
android:id="@+id/viewstub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/stub_test" />
</LinearLayout>
stub_test.xml(填充布局)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello"
android:orientation="vertical">
</TextView>
public class StubActivity extends AppCompatActivity {
@BindView(R.id.inflate_vs)
Button inflate;
@BindView(R.id.check_viewstub)
Button check_vs;
@BindView(R.id.check_textview)
Button check_tv;
@BindView(R.id.debug_tv)
TextView debug_tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stub);
ButterKnife.bind(this);
inflate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
findViewById(R.id.viewstub).setVisibility(View.VISIBLE);
}
});
check_vs.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (findViewById(R.id.viewstub) == null) {
debug_tv.append("viewstub is null"+"\n");
} else {
debug_tv.append("viewstub is not null"+"\n");
}
}
});
check_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (findViewById(R.id.textview) == null) {
debug_tv.append("textview is null"+"\n");
} else {
debug_tv.append("textview is not null"+"\n");
}
}
});
}
}
结果演示
viewstub填充后就消失,再次使用viewstub容易造成空指针错误