1

当我按下一个按钮时,我希望出现一个膨胀视图,当我按下同一个按钮时,这个视图消失......

ViewGroup parent = (ViewGroup) findViewById(R.id.inflate_place);
View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.inflate_find, null);

for(int i=0; i<parent.getChildCount(); ++i) {
    View nextChild = parent.getChildAt(i);

    // Here i want that if is the same layout, this disappear
    if (nextChild.equals(view)) { 
        parent.removeView(nextChild);
        return;
    }
}

parent.addView(view);
4

2 回答 2

2

一遍又一遍地重新膨胀相同的视图通常不是最好的方法。

只需向您的 Activity 添加一个变量,该变量指向您要隐藏的视图:

View myView;

在 onCreate 中,扩充您的视图:

myView = LayoutInflater.from(getBaseContext()).inflate(R.layout.inflate_find, null);

现在,如果您想显示视图,您可以像在现有代码中一样添加它:

ViewGroup parent = (ViewGroup) findViewById(R.id.inflate_place);
parent.add(myView);

删除可以这样完成:

If (myView.getParent()!=null){
   ((ViewGroup) myView.getParent()).removeView(myView);
}

切换视图的可见性将像这样工作:

If (myView.getParent()!=null){
   ((ViewGroup) myView.getParent()).removeView(myView);
} else {
   ViewGroup parent = (ViewGroup) findViewById(R.id.inflate_place);
   parent.add(myView);
}

你可能想看看 View.setVisibility()。这通常用于显示和隐藏视图:http: //developer.android.com/reference/android/view/View.html#setVisibility%28int%29

于 2013-07-26T17:39:17.320 回答
1

您可以从 ViewGroup indexOfChild(View view) 方法检查孩子是否存在。它返回一个正整数,表示视图在组中的位置,如果视图不存在于组中,则返回 -1

    ViewGroup rootLayout = (ViewGroup) getWindow().peekDecorView();
    LayoutInflater li = LayoutInflater.from(this);
    View myView= li.inflate(R.layout.recorder, null);
    if(rootLayout.indexOfChild(myView) == -1)
        rootLayout.addView(myView);
于 2014-11-28T14:15:51.503 回答