在Android应用程序中使用Activity或Fragment

时间:2013-09-19 02:25:17

标签: android android-activity android-fragments

我是android新手。我经常使用Activity来从一个屏幕更改为另一个屏幕与其他功能。从主页到热门页面的示例。在那之后,我知道片段,但我以前从未使用它。所以,如果我在屏幕上有一个带有多标签的应用程序,请不要在这里使用TabHost。每个标签的功能非常不同,例如:标签主页,标签热门,标签新闻,标签简介...喜欢Instagram应用程序。我必须使用那个

  1. 活动将屏幕更改为另一个屏幕,这意味着:我有家庭活动,热门活动,......并在更改Sreen时更改活动。每个活动都有各种布局。
  2. 在一个活动中使用片段。我们有多个片段,例如HomeFragment,Popular Fragment ...在更改屏幕时更换片段。
  3. 哪种方式更好? 我想问什么时候只使用手机屏幕。 (小尺寸屏幕,不适用于平板电脑)。

2 个答案:

答案 0 :(得分:4)

将Android设备视为更多的频谱非常重要,而不是明确的“手机”与“平板电脑”桶。在许多情况下,您可能希望在mediumlarge屏幕上的屏幕上显示更多信息。有时,这意味着同时显示两个“活动”。

使用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
    }
}

这样,您只需实施一次标签功能,并在每项活动中获取它。