隐藏后不会出现Android自定义AutoCompleteTextView

时间:2016-05-14 14:02:31

标签: android android-custom-view

我创建autoCompleteTextView,如下Layout和Java类:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/autoCompleteTextViewGroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:minHeight="@dimen/component_height">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:animateLayoutChanges="true">

        <AutoCompleteTextView
            android:id="@+id/autoCompleteTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:completionThreshold="1"
            android:singleLine="true" />

    </android.support.design.widget.TextInputLayout>

    <android.support.v4.widget.ContentLoadingProgressBar
        android:id="@+id/progressBar"
        android:layout_width="24dp"
        android:layout_height="24dp"
        android:layout_gravity="center_vertical"
        android:indeterminate="true"
        android:indeterminateDrawable="@anim/anim_indeterminate_mini"
        android:interpolator="@anim/anim_progress_interpolator"
        android:visibility="visible" />
</FrameLayout>

和Java类是:

public class MAutoCompleteText extends LinearLayout {
AutoCompleteTextView autoCompleteTextView;
ContentLoadingProgressBar progressBar;
TextInputLayout textInputLayout;
ViewGroup autoCompleteTextViewGroup;


public MAutoCompleteText(Context context) {
    super(context);
    init(context);
}

public MAutoCompleteText(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

public MAutoCompleteText(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context);
}

@TargetApi(21)
public MAutoCompleteText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    init(context);
}

private void init(Context context) {
    inflate(context, R.layout.layout_auto_complete_text, this);
    autoCompleteTextViewGroup = (ViewGroup) findViewById(R.id.autoCompleteTextViewGroup);
    textInputLayout = (TextInputLayout) findViewById(R.id.textInputLayout);
    autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
    progressBar = (ContentLoadingProgressBar) findViewById(R.id.progressBar);

}

public void setAdapter(ArrayAdapter<String> adapter) {
    autoCompleteTextView.setAdapter(adapter);

}

public String getText() {
    return autoCompleteTextView.getText().toString();
}

public void setErrorEnabled(boolean status) {
    textInputLayout.setErrorEnabled(status);
}

public void setError(int errorId) {
    textInputLayout.setError(getContext().getString(errorId));
}

public int getVisibility() {
    return autoCompleteTextViewGroup.getVisibility();
}

public void setVisibility(int visibility) {
    autoCompleteTextViewGroup.setVisibility(visibility);
    autoCompleteTextViewGroup.setMinimumHeight(R.dimen.component_height);
}

public void setProgressBarVisibility(int visibility) {
    progressBar.setVisibility(visibility);
}

public MAutoCompleteText setHint(int hintId) {
    autoCompleteTextView.setHint(hintId);
    return this;
}

public void setImeOption(int imeOption) {
    autoCompleteTextView.setImeOptions(imeOption);
}

}

一切正常。我setVisibility(GONE)和我的组件隐藏了UI, 但是当我使用setVisibility(VISIBLE)时,不会发生任何事情!!!!

如何以编程方式显示我的组件?

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案,至少它现在有效...... :) 我将setVisibility更改为以下代码:

public void setVisibility(int visibility) {
    autoCompleteTextViewGroup.setVisibility(visibility);
    if (visibility == View.VISIBLE) {
        textInputLayout.setVisibility(visibility);
        autoCompleteTextView.setVisibility(visibility);
        progressBar.setVisibility(visibility);
        requestLayout();
    }

}

实际上是requestLayout();再次在UI上重新绘制我的组件的布局,它显示正确。