Android隐藏膨胀视图

Android隐藏膨胀视图,android,android-layout,android-view,Android,Android Layout,Android View,我有4个视图,由1个SherlockMapActivity控制。目前,我通过removeAllViews()在带有选项卡的视图之间切换,然后再次对视图进行充气。这似乎是一种非常低效的方式 有没有办法“隐藏”一个已经膨胀的视图,并将一个新视图重新定位到前面?我尝试了各种不同的视觉效果等,但都无济于事。以下是我目前的做法: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInsta

我有4个视图,由1个SherlockMapActivity控制。目前,我通过removeAllViews()在带有选项卡的视图之间切换,然后再次对视图进行充气。这似乎是一种非常低效的方式

有没有办法“隐藏”一个已经膨胀的视图,并将一个新视图重新定位到前面?我尝试了各种不同的视觉效果等,但都无济于事。以下是我目前的做法:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    //load our views!
    this.baseViewGroup = (ViewGroup)this.findViewById(android.R.id.content);

    this.mapView = new MapView(ActivityMain.this, MAP_API_KEY);
    this.mapView.setClickable(true);

    this.createMenu();
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
    Log.v(CLASS_NAME, "tab selected: "+tab.getPosition());

    if (0 == tab.getPosition())
    {
        this.baseViewGroup.removeAllViews();
        this.getLayoutInflater().inflate(R.layout.map, this.baseViewGroup);
    }
    else if (1 == tab.getPosition())
    {
        this.baseViewGroup.removeAllViews();
        this.getLayoutInflater().inflate(R.layout.list, this.baseViewGroup);
    }
}
然后,我可以使用ViewController(某种类型)做一些奇妙的事情,在重新创建视图时重新启动视图的上一个状态,但这只是一种疯狂。有更好的方法吗

编辑 我曾尝试保存视图(膨胀一次,删除,然后重新添加),但我得到了这种奇怪的行为。基本上,所有膨胀视图都以半透明的方式显示在彼此的顶部。再多的setVisibility()也不能让它们完全消失

我尝试的代码(在适当的情况下添加到onCreate()和onTabSelected()中):


不要一次又一次地夸大观点。相反,有4个类级视图变量,如

private View firstView;
private View secondView;
private View thirdView;
private View fourthView;
现在,在每次选项卡更改/按下时。从父视图中删除所有子视图,并将适当的视图添加到父视图中。像

parentView.removeAllViews();
parentView.addView(secondView);
编辑:

为parentView传递null

而不是这个,

this.moreLayout = this.getLayoutInflater().inflate(R.layout.more, this.baseViewGroup);
这样做,

this.moreLayout = this.getLayoutInflater().inflate(R.layout.more, null);

不要一次又一次地夸大观点。相反,有4个类级视图变量,如

private View firstView;
private View secondView;
private View thirdView;
private View fourthView;
现在,在每次选项卡更改/按下时。从父视图中删除所有子视图,并将适当的视图添加到父视图中。像

parentView.removeAllViews();
parentView.addView(secondView);
编辑:

为parentView传递null

而不是这个,

this.moreLayout = this.getLayoutInflater().inflate(R.layout.more, this.baseViewGroup);
这样做,

this.moreLayout = this.getLayoutInflater().inflate(R.layout.more, null);

你也试过把可视性设置为“消失”了吗?@MikeIsreal-是的,这根本没用。尝试了“消失”和“不可见”,但没有效果。可能您需要使父级无效,以便它将重新绘制,否则“消失”和“不可见”肯定会影响视图。按照我发布的编辑中的代码,我会继续使所有布局可见或不可见。我有这个.mapLayout.setVisibility(View.GONE);this.moreLayout.setVisibility(View.VISIBLE);此.baseViewGroup.invalidate()无效;但由于某种原因,这使得所有视图都可见(具有奇怪的透明度)。我明天会尝试更多并发回。你也尝试过将可视性设置为“消失”吗?@MikeIsreal-是的,这根本没有任何作用。尝试了“消失”和“不可见”,但没有效果。可能您需要使父级无效,以便它将重新绘制,否则“消失”和“不可见”肯定会影响视图。按照我发布的编辑中的代码,我会继续使所有布局可见或不可见。我有这个.mapLayout.setVisibility(View.GONE);this.moreLayout.setVisibility(View.VISIBLE);此.baseViewGroup.invalidate()无效;但由于某种原因,这使得所有视图都可见(具有奇怪的透明度)。明天我将尝试更多内容并发回。遗憾的是,这只会使ViewGroup content=(ViewGroup)成为this.moreLayout.getParent();返回NULL,以便在移除AllViews()时获得NULL指针异常:(
content.addView(this.mapalayout);
您需要先执行此操作,然后才能执行此操作
this.baseViewGroup.addView(this.mapalayout);
我必须在开始“ViewGroup content”之前执行此操作(添加视图之前)现在它可以正常工作了!有点奇怪,我必须添加它,删除所有视图,然后再次添加它,但这并不像每次都要膨胀它那么糟糕。遗憾的是,这只会使ViewGroup content=(ViewGroup)this.moreLayout.getParent();返回NULL,所以当我删除AllViews()时,我会得到一个NULL指针异常:(
content.addView)(this.mapalayout);
您需要先执行此操作,然后才能执行此操作
this.baseViewGroup.addView(this.mapalayout);
在开始“视图组内容”之前(添加视图之前),我必须执行此操作现在它工作正常了!有点奇怪,我不得不添加它,删除所有视图,然后再添加一次,但它并没有每次都要膨胀那么糟糕。