我怎么知道是否存在膨胀视图

时间:2013-07-26 17:27:50

标签: android layout-inflater

当我按下按钮时,我想要显示一个膨胀视图,当我按下相同的按钮时,该视图会消失......

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);

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果子项存在与否,您可以从ViewGroup indexOfChild(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);