【问题标题】:ViewStub does not show?ViewStub 不显示?
【发布时间】:2015-03-11 13:45:46
【问题描述】:

我有一个Relativelayout rl_root,其中包含一些视图和一个按钮,当按下按钮时,调用了一个名为showConfigStubView 的方法,它使布局rl_root 消失,viewStub 应该替换它视图组rl_root.

在运行时,当调用 showConfigStubView 方法时,viewGroup rl_rootdisappears 并且 viewStub 永远不会显示。

int showConfigStubView 是调用 View.gone 以使 rl_root 消失,然后以编程方式创建一个新的 Viewstub viewStub = new ViewStub(getActivity());,然后使用其参数创建一个 realtiveLayout 然后将 ViewStub 添加到新的RelativeLayout,然后用其各自的布局膨胀 viewStub

请看下面的代码,showConfigStubView 方法解释了我如何调用ViewStub

主布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical|center_horizontal">

<RadioGroup 
    android:id="@+id/rg_mqtt_config_choice"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:checkedButton="@+id/rb_used_configs">
    <RadioButton 
        android:id="@+id/rb_used_configs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rb_used_configs"/>
    <RadioButton
        android:id="@+id/rb_new_configs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rb_new_configs" />
</RadioGroup>

<Button 
    android:id="@+id/btn_connect"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/rg_mqtt_config_choice"
    android:text="@string/btn_connect"/>

ViewStub

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<TextView 
    android:id="@+id/tvSubView_ip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:paddingTop="10dp"
    android:text="@string/tvSubView_ip"/>
<EditText 
    android:id="@+id/etSubView_ip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/tvSubView_ip"
    android:layout_marginStart="20dp"
    android:hint="@string/etSubView_ip_hint"/>

<TextView 
    android:id="@+id/tvSubView_port"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/tvSubView_ip"
    android:paddingTop="20dp"
    android:text="@string/tvSubView_port"/>
<EditText 
    android:id="@+id/etSubView_port"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/tvSubView_port"
    android:layout_below="@+id/etSubView_ip"
    android:layout_marginStart="7dp"
    android:hint="@string/etSubView_port_hint"/>

<TextView 
    android:id="@+id/tvSubView_clientID"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/tvSubView_port"
    android:paddingTop="20dp"
    android:text="@string/tvSubView_clientID"/>
<EditText 
    android:id="@+id/etSubView_clientID"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/tvSubView_clientID"
    android:layout_below="@+id/etSubView_port"
    android:layout_marginStart="7dp"
    android:hint="@string/etSubView_clientID_hint"/>

<TextView 
    android:id="@+id/tvSubView_KATimer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/tvSubView_clientID"
    android:paddingTop="20dp"
    android:text="@string/tvSubView_KATimer"/>
<EditText 
    android:id="@+id/etSubView_KATimer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/tvSubView_KATimer"
    android:layout_below="@+id/etSubView_clientID"
    android:layout_marginStart="7dp"
    android:hint="@string/etSubView_KATimer_hint"/>

<CheckBox
    android:id="@+id/cbSubView_CleanSession"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tvSubView_KATimer"
    android:layout_marginTop="20dp"
    android:gravity="center_vertical"
    android:checked="true"
    android:text="@string/cbSubView_CleanSession"/>

方法 showConfigStubView

protected void showConfigStubView() {
    // TODO Auto-generated method stub
    this.rl_Root.setVisibility(View.GONE);
    viewStub = new ViewStub(getActivity());

    RelativeLayout relativeLayout = new RelativeLayout(getActivity());
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams 
            ((int) LayoutParams.WRAP_CONTENT, (int) LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.CENTER_HORIZONTAL);
    params.topMargin = 10;
    viewStub.setLayoutParams(params);
    //rl_Root.addView(viewStub);

    viewStub.setLayoutResource(R.layout.mqttconfig_subtree);
    relativeLayout.addView(viewStub);
    View inflated = viewStub.inflate();
}

【问题讨论】:

    标签: android android-layout layout android-relativelayout viewstub


    【解决方案1】:

    请注意,viewStub 应始终属于非空 ViewGroup 或 Layout。看到您对Gone 的RelativeLayout 可见性被视为没有您的viewStub 应该属于的viewGroup。我建议尝试以下方法:

    protected void showConfigStubView() {
        // TODO Auto-generated method stub
        this.rg_ConfigChoice.setVisibility(View.GONE);
        this.btn_connect.setVisibility(View.GONE);
        this.viewStub = new ViewStub(getActivity());
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams 
                ((int) LayoutParams.WRAP_CONTENT, (int) LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.CENTER_HORIZONTAL);
        this.viewStub.setLayoutParams(params);
        this.rl_Root.addView(viewStub);
        this.viewStub.setLayoutResource(R.layout.mqttconfig_subtree);
        View inflated = viewStub.inflate();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2016-12-18
      • 2021-12-01
      • 2016-04-03
      相关资源
      最近更新 更多