【问题标题】:Use Activity or Fragment in Android Application在 Android 应用程序中使用 Activity 或 Fragment
【发布时间】:2013-09-19 02:25:16
【问题描述】:

我是安卓新手。我经常使用 Activity 从一个屏幕切换到另一个具有其他功能的屏幕。从主页到热门页面的示例。在那之后,我知道片段,但我以前从未使用过它。因此,如果我的应用程序在屏幕上有多个选项卡,请不要在此处使用 TabHost。每个选项卡的功能非常不同,例如:选项卡主页、选项卡热门、选项卡新闻、选项卡配置文件......就像 Instagram 应用程序。我必须使用它

  1. 将屏幕更改为另一个屏幕的活动,这意味着:我有 Home Activity、Popular Activity,...并在更改 Sreen 时更改 Activity。每个 Activity 都有各自的布局。
  2. 在一个 Activity 中使用片段。我们有多个片段,例如 HomeFragment、Popular Fragment... 更改 Screen 时替换 Fragment。

什么方法更好? 我想问什么时候只使用手机屏幕。 (小尺寸屏幕,不适用于平板电脑)。

【问题讨论】:

    标签: android android-activity android-fragments


    【解决方案1】:

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

    使用 Fragments 几乎不需要开销,但增加了可衡量的灵活性,尤其是在开发过程的早期考虑时。如果你正确使用 Fragments,适应更大的屏幕是非常简单的。但是,有一些“陷阱”可能会使 Fragment 看起来比实际情况更令人生畏:

    • Fragment 类必须始终声明为 public(如果是嵌套类,则必须为 static)。

    • 在父Activity(或FragmentActivity)中,如果savedInstanceState == null,则仅添加根Fragment。如果您正确管理Fragment 的状态,一切都会为您处理(滚动位置、EditText 值等)。

    • Activity 必须调用 onSavedInstanceState 以使 Fragment 正确恢复其状态。

    • setRetainInstance(true) 只能用于“无头”片段。这是当您使用没有 UI 且未添加到通常用于执行生命周期相关工作的后台堆栈的 Fragment 时。

    • 在 XML 中声明的片段不能在 FragmentTransaction 中使用(反之亦然)。

    Fragment 视为模块化视图,当重要事件发生时,它为Activity 提供挂钩(回调)。 Activity 根据可用空间决定是启动新的Activity,还是显示新的Fragment

    【讨论】:

      【解决方案2】:

      您可以使用任何一种方式。如果您决定使用活动解决方案,请创建一个包含所有选项卡功能的基本活动类。您不想在每个 Activity 中一遍又一遍地实现它。

      public class BaseActivity extends Activity {
      
          @Override 
          public void onCreate(...) {
              // Init tabs
          }
      
          // Methods for tab handling
      }
      

      每个 Activity(Popular、Profile、Home、...)都扩展 BaseActivity

      public class PopularActivity extends BaseActivity {
      
          @Override
          public void onCreate(...) {
              super.onCreate(...);
      
              // Init only the popular activity elements here
          }
      }
      

      这样您只需实现一次选项卡功能并在每个活动中获取它。

      【讨论】:

      • 我只理解这种方式,但我也认为它就像每个屏幕都有每个活动,所有活动都从 BaseActivity 扩展。所以,我不知道 BaseActivity 必须初始化什么。请提供一些线索...以更了解。谢谢你。
      猜你喜欢
      • 2023-02-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      相关资源
      最近更新 更多