我想在Android的同一个标签下打开很多视图。换句话说,我有一个包含许多选项卡的标签主机。其中一个选项卡具有列表视图作为内容。单击列表项时,我希望它在同一选项卡下打开一个新视图。我做了一些谷歌研究,我发现我必须使用android片段,但我不确定这一点。您认为使用Fragment是最佳解决方案还是您有其他想法?提前谢谢。
答案 0 :(得分:1)
Fragral和FragmentManager是自Honeycomb以来的推荐路径。如果您打算使用Gingerbread或更早版本的设备,则需要使用兼容性库(http://developer.android.com/sdk/compatibility-library.html)。
您会注意到ActivityGroup已被弃用。这并不意味着你现在不能使用它,但在某些时候你将被迫迁移,所以你现在也可以开始。
答案 1 :(得分:0)
将ActivityGroup类与ViewAnimator一起使用,并按ID获取正确的活动。
public class YourActivity extends ActivityGroup {
private Stack<String> ids;
private LocalActivityManager activityManager;
private ViewAnimator animator;
private int serial;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.group);
ids = new Stack<String>();
animator = (ViewAnimator) findViewById(R.id.animator);
activityManager = getLocalActivityManager();
}
@Override
public void startActivity(final Intent intent) {
String id = "id" + serial++;
ids.push(id);
View view = activityManager.startActivity(id, intent).getDecorView();
animator.addView(view);
animator.setDisplayedChild(ids.size() - 1);
}
@Override
public boolean onKeyDown(final int keyCode, final KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
int size = ids.size();
if (size > 0) {
String topId = ids.pop();
View view = activityManager.destroyActivity(topId, true).getDecorView();
animator.removeView(view);
if (size > 1) {
topId = ids.get(size - 2);
if (activityManager.getActivity(topId) instanceof ClassA) {
((ClassA) activityManager.getActivity(topId)).onResume();
} else if (activityManager.getActivity(topId) instanceof ClassB) {
((ClassB) activityManager.getActivity(topId)).onResume();
}
return true;
}
}
}
return super.onKeyDown(keyCode, event);
}
}