我们可以按如下方式创建自定义组件:
public class MyLinearLayout extends LinearLayout {
public MyLinearLayout(Context context) {
super(context);
doInflate();
}
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
doInflate();
}
// other constructors
public void doInflate(){
inflate(getContext(), R.layout.my_linear_layout_definition_xml, this);
this.setVisibility(GONE);
}
// some logic to show view
public void show(CustomObject o) {
if(o.someCondition()) return;
this.setVisibility(VISIBLE);
}
}
如果我通过代码示例中的this
来控制可见性,我认为ViewGroup
视图永远不会显示。即this.setVisibility(VISIBLE);
不起作用。
但是如果在布局文件(my_linear_layout_definition_xml.xml)中我有:
<LinearLayout android:id="@+id/my_linear_layout_parent_container"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
>
// other children views here...
在代码中我代替上一段代码:
public void show(CustomObject o) {
if(o.someCondition()) return;
findViewById(R.id.my_linear_layout_parent_container)
.setVisibility(VISIBLE);
}
可见性确实有效。即从变得明显。
所以我的问题是为什么这会起作用?my_linear_layout_parent_container
我在构造函数中膨胀与我班级中的this
之间的关系/区别是什么?
答案 0 :(得分:0)
你回答显然是矛盾的,this.setVisibility(GONE)有效(因为你说视图没有显示),但是this.setVisibility(VISIBLE)不是吗?您是否也在xml中设置了可见性?
我试过了,它对我有用。 this.setVisibility()和findViewById(...)。setVisibility()之间没有区别,因此您的代码应该正常工作。您是否可以更具体地了解何时调用方法show(CustomObject o)?你确定该方法没有返回
if(o.someCondition) return
请进一步详细说明您的问题,我会在您完成后回复编辑我的帖子,欢呼