我是android新手。我经常使用Activity来从一个屏幕更改为另一个屏幕与其他功能。从主页到热门页面的示例。在那之后,我知道片段,但我以前从未使用它。所以,如果我在屏幕上有一个带有多标签的应用程序,请不要在这里使用TabHost。每个标签的功能非常不同,例如:标签主页,标签热门,标签新闻,标签简介...喜欢Instagram应用程序。我必须使用那个
哪种方式更好? 我想问什么时候只使用手机屏幕。 (小尺寸屏幕,不适用于平板电脑)。
答案 0 :(得分:4)
将Android设备视为更多的频谱非常重要,而不是明确的“手机”与“平板电脑”桶。在许多情况下,您可能希望在medium
和large
屏幕上的屏幕上显示更多信息。有时,这意味着同时显示两个“活动”。
使用Fragments需要很少的开销,但增加了可测量的灵活性,尤其是在开发过程的早期阶段。如果正确使用Fragments,则适应更大的屏幕非常简单。但是,有一些“陷阱”可能会使碎片看起来更加令人生畏:
Fragment
类必须始终声明为public
(如果它是嵌套类,则必须为static
)。
在父Activity
(或FragmentActivity
)中,只有Fragment
添加根savedInstanceState == null
。如果您正确管理Fragment
的状态,则会为您处理所有内容(滚动位置,EditText值等)。
父Activity
必须致电onSavedInstanceState
,以便Fragment
正确恢复其状态。
setRetainInstance(true)
只能用于“无头”碎片。这是当您使用没有UI的片段,并且没有添加到后栈时,后者通常用于执行与生命周期相关的工作。
以XML格式声明的片段无法在FragmentTransaction
中使用(反之亦然)。
将Fragment
视为模块化视图,当重要事件发生时,它为Activity
提供钩子(回调)。 Activity
根据可用空间决定是发布新Activity
还是展示新Fragment
。
答案 1 :(得分:1)
您可以使用任何一种方式。如果您决定使用Activity解决方案,请创建一个包含所有Tab功能的基本活动类。您不希望一遍又一遍地在每个Activity中实现它。
public class BaseActivity extends Activity {
@Override
public void onCreate(...) {
// Init tabs
}
// Methods for tab handling
}
每个活动(热门,个人资料,主页,...)都扩展了BaseActivity
public class PopularActivity extends BaseActivity {
@Override
public void onCreate(...) {
super.onCreate(...);
// Init only the popular activity elements here
}
}
这样,您只需实施一次标签功能,并在每项活动中获取它。