gpt4 book ai didi

android - 有多少 Activity 与 fragment ?

转载 作者:IT老高 更新时间:2023-10-28 12:53:41 32 4
gpt4 key购买 nike

简介:

基本的“fragment 教程”模式是这样的:

  1. 在平板电脑上,左侧是列表,右侧是详细信息。
  2. 两者都是 Fragments 并且都驻留在同一个 Activity 中。
  3. 在手机上,在一个 Activity 中列出 Fragment
  4. 使用 Fragment 的详细信息启动一个新的 Activity

(例如 Android 3.0 Fragments API by Dianne HackbornFragments API Guide)

在这两种设备上,功能都在 Fragments 中。 (简单)

平板上,整个app是1个Activity,在手机上,有>许多 Activity


问题:

  • 是否有理由将手机应用拆分为多个Activity

这个方法的一个问题是你在主平板Activity和单独的Phone中重复了很多逻辑 Activity .

  • 在这两种情况下保留 1 Activity 模型会不会更容易,使用相同的 Fragments 进出逻辑(只是使用不同的布局)?

这样大部分逻辑都驻留在Fragments本身,只有一个Activity - 代码重复更少。

此外,我读到的关于 ActionBarSherlock 的内容是,它似乎与 Fragments 而不是 Activities 一起使用效果最好(但我没有工作还没有)。

教程是否过于简单,或者我错过了这种方法的主要内容?


我们已经在办公室成功地尝试了这两种方法 - 但我即将开始一个更大的项目,并且想让自己的事情尽可能简单。

一些相关问题的链接:


更新

在问题上开始赏金 - 仍然不明白为什么我需要在我的平板电脑 Activity 和每个手机 Activity 中复制我的应用程序逻辑。

还发现了 Square 的人写的一篇有趣的文章,很值得一读:

最佳答案

我同意教程非常简化。他们只是介绍 Fragments 但我不同意建议的模式。

我也同意,在许多 Activity 中复制应用程序的逻辑不是一个好主意(请参阅 DRY Principle on wikipedia)。


我更喜欢 ActionBarSherlock Fragments Demo 应用程序使用的模式(download heresource code here)。与问题中提到的教程最匹配的演示是应用程序中称为“布局”的演示;或源代码中的FragmentLayoutSupport

在此演示中,逻辑已从 Activity 移到 Fragment 中。 TitlesFragment 实际上包含了改变 fragment 的逻辑。这样,每个Activity就很简单了。复制许多非常简单的 Activity ,其中没有任何逻辑在 Activity 内部,这非常简单。

通过将逻辑放入 fragment 中,无需多次编写代码;无论将 Fragment 放入哪个 Activity,它都可用。这使它成为一种比基础教程建议的模式更强大的模式。

    /**
* Helper function to show the details of a selected item, either by
* displaying a fragment in-place in the current UI, or starting a
* whole new activity in which it is displayed.
*/
void showDetails(int index)
{
mCurCheckPosition = index;

if (mDualPane)
{
// We can display everything in-place with fragments, so update
// the list to highlight the selected item and show the data.
getListView().setItemChecked(index, true);

// Check what fragment is currently shown, replace if needed.
DetailsFragment details = (DetailsFragment) getFragmentManager()
.findFragmentById(R.id.details);
if (details == null || details.getShownIndex() != index)
{
// Make new fragment to show this selection.
details = DetailsFragment.newInstance(index);

// Execute a transaction, replacing any existing fragment
// with this one inside the frame.
FragmentTransaction ft = getFragmentManager()
.beginTransaction();
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}

}
else
{
// Otherwise we need to launch a new activity to display
// the dialog fragment with selected text.
Intent intent = new Intent();
intent.setClass(getActivity(), DetailsActivity.class);
intent.putExtra("index", index);
startActivity(intent);
}
}

ABS 的另一个优点模式是您最终不会得到包含大量逻辑的平板电脑 Activity ,这意味着您可以节省内存。教程模式可以在更复杂的应用程序中导致非常大的主要 Activity ;因为它需要随时处理放入其中的所有 fragment 的逻辑。

总的来说,不要认为它是被迫使用许多 Activity 。可以将其视为有机会将您的代码拆分为许多 fragment ,并在使用它们时节省内存。

关于android - 有多少 Activity 与 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12363790/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com