0

我有一个rl_root包含一些视图和一个按钮的 Relativelayout,当按下按钮时,会调用一个showConfigStubView调用方法,它是为了使布局rl_root消失并且viewStub应该替换这个 viewGroup rl_root

在运行时,当showConfigStubView调用该方法时,viewGrouprl_root消失并且viewStub永远不会显示。

showConfigStubView调用intView.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"/>

视图存根

    <?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();
}
4

1 回答 1

0

请注意,viewStub 应始终属于非空 ViewGroup 或 Layout。看到您的 RelativeLayout 可见性Gone被视为没有 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();
}
于 2015-01-13T15:21:05.827 回答