我有4个视图由1个SherlockMapActivity控制。目前,我通过removeAllViews()在选项卡之间切换选项卡,然后再次重新膨胀视图。这种接缝就像是一种非常低效的方式。
有没有办法只是“隐藏”已经膨胀的视图并将新视图重新定位到前端?我已尝试过setVisibility等的每个变体都无济于事。以下是我现在的处理方式:
@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);
}
}
然后,我可以使用ViewControllers(各种类型)做一些奇特的事情,以便在重新创建时重新启动视图的先前状态,但这只是疯狂。有更好的方法吗?
修改 我已经尝试保存视图(膨胀一次,删除但只是重新添加)但我得到这种奇怪的行为。基本上,所有膨胀的视图以半透明的方式显示在彼此之上。没有任何setVisibility()可以让它们完全消失。
我尝试的代码(在适当的地方添加到onCreate()和onTabSelected()):
//in onCreate()
this.mapLayout = this.getLayoutInflater().inflate(R.layout.map, this.baseViewGroup);
this.moreLayout = this.getLayoutInflater().inflate(R.layout.more, this.baseViewGroup);
//in onTabSelected()
ViewGroup content = (ViewGroup)this.mapLayout.getParent();
content.removeAllViews();
content.addView(this.mapLayout);
答案 0 :(得分:1)
Donot一次又一次地夸大观点。相反,有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);