我想在android中使用ViewStub,所以请帮帮我.我创造了
ViewStub stub = new ViewStub;
View inflated = stub.inflate(); 
Run Code Online (Sandbox Code Playgroud)
如何以编程方式使用它?
所以我可以在运行时给ViewStub充气.假设我想让它消失,然后根据发生的某些事件再次膨胀(例如,根据用户在屏幕上选择的内容进行膨胀和放气的工具栏).
我可以使用View.setVisibility(View.GONE)....还有其他方法吗?
或者我在这里做错了什么?
谢谢!:)
<\ include>标记和<\ ViewStub>标记之间有什么区别,在设计布局时哪一个是可取的.
谢谢,
venu
我有一个ListView,其中listview的每一行包含大约10个ImageButtons.这些按钮中的大多数都具有visibility = Gone,并且仅在极少数情况下出现.我想知道是否值得用ViewStubs替换这些ImageButton以避免一直为listview的所有行加载它们(以及它们包含的图像).然后他们的可见性再次设置为"Gone",所以我不确定加载它们有什么影响.他们的图像真的被加载了吗?
请注意,我所说的是将8个ImageButtons替换为8个ViewStub,而不是1个
干杯
据我所知,参与度量和布局ViewStub的视图和视图都不会GONE传递(或者无论如何渲染).
渲染性能有差异吗?什么时候使用哪种最佳做法?
无论如何使用viewStubs与dataBinding?可以ViewStubProxy帮忙吗?
我的存根当前看起来像这样:
    <ViewStub
  android:id="@+id/stub_import"
  android:inflatedId="@+id/panel_import"
  android:layout="@layout/progress_overlay"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="@{myobject.bottom ? bottom:top}" />
Run Code Online (Sandbox Code Playgroud)
但是当我给viewStub充气时,这个布局会被取代,所以ViewStubs如何与android dataBinding一起使用?
这是我从文档中看到的:
ViewStubs
ViewStubs与普通视图略有不同.它们开始是不可见的,当它们要么被显示或被明确告知要膨胀时,它们会通过膨胀另一个布局来替换它们.
由于ViewStub基本上从View层次结构中消失,因此绑定对象中的View也必须消失以允许收集.由于视图是最终的,因此ViewStubProxy对象取代了ViewStub,使开发人员在ViewStub存在时可以访问ViewStub,并且在ViewStub膨胀时也可以访问膨胀的View层次结构.
在膨胀另一个布局时,必须为新布局建立绑定.因此,ViewStubProxy必须侦听ViewStub的ViewStub.OnInflateListener并在那时建立绑定.由于只有一个可以存在,ViewStubProxy允许开发人员在其上设置一个OnInflateListener,它将在建立绑定后调用它.
我有以下布局.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            style="@style/list_item_bottom">
    <TextView android:id="@+id/list_item_name"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"/>
    <ViewStub android:id="@+id/stub_for_alt_name"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:layout_below="@+id/list_item_name"
              android:layout="@layout/text_view_alt_name"/>
    <ImageView android:id="@+id/list_item_dopinfo1_image"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_below="@+id/stub_for_alt_name"
               android:src="@drawable/ic_released"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我希望ViewStub低于TextView,ImageView低于ViewStub.
ViewStub膨胀的元素按照我的预期显示.但没有ViewStub的元素将TextView与ImageView重叠.
我的布局出了什么问题?
更新:
我发现的唯一解决方案是为ViewStub和相关的TextView提供相同的android:id值.
我没有找到任何布尔方法执行此任务.我可以通过检查更改为指定id的那个viewStub来完成inflatedid吗?
Javacode:
    protected void plantViewTree() {
    // TODO Auto-generated method stub
        ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00);
            if (mViewStub is inflated) {
              //do somthing
              }else
               mViewstub.inflate();
}
Run Code Online (Sandbox Code Playgroud)
更新 关于eOutput的评论
根据此代码,toast始终显示其消息,这意味着mViewStub分配给findViewById它的消息永远不会为null,除了viewstub底层alyout中的视图不可用.有什么建议.?
protected void plantViewTree() {
    // TODO Auto-generated method stub
    ViewStub mViewstub = (ViewStub) findViewById(R.id.viewStub00);
    if (mViewstub != null)
        Toast.makeText(getApplicationContext(), "view is inflated", 
Toast.LENGTH_LONG).show();
    else
        mViewstub.inflate();
}
Run Code Online (Sandbox Code Playgroud) 扩展是否具有调用膨胀视图的魔力?据我所知,我应该打破代码和呼叫的和谐findViewById
目的是layout_ongoingView在某个时候使布局膨胀,并根据场景再次隐藏和显示
<ViewStub
    android:id="@+id/viewStubOngoing"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inflatedId="@+id/ongoingView"
    android:layout="@layout/layout_ongoingView" />
Run Code Online (Sandbox Code Playgroud)
和代码
override fun hideOngoingPanel() {
    if (viewStubOngoing !is ViewStub) {
        findViewById(R.id.ongoingView).visibility = View.GONE
    }
}
override fun showOngoingPanel() {
    if (viewStubOngoing !is ViewStub) {
        findViewById(R.id.ongoingView).visibility = View.VISIBLE
    } else {
        viewStubOngoing.inflate()
    }
}
Run Code Online (Sandbox Code Playgroud) 似乎在a ViewStub中膨胀时ConstraintLayout,结果视图已经失去了所有约束.我想我们可以使用膨胀视图来定义约束ConstraintSet,但这种方法会失败ViewStub.
有没有办法做到这一点?
android ×10
viewstub ×10
inflate ×2
performance ×2
data-binding ×1
deflate ×1
include ×1
view ×1
visibility ×1