在Android中使用片段而不是视图有什么好处?
在为在Android中使用片段而不是视图有什么好处?,android,android-fragments,android-view,android-lifecycle,software-design,Android,Android Fragments,Android View,Android Lifecycle,Software Design,在为Android开发时,您可以将目标(或最低)sdk设置为4(API 1.6),并添加Android兼容包(v4),以添加对片段的支持。昨天我这样做了,并成功地实现了片段,以可视化自定义类中的数据 我的问题是:使用片段与简单地从自定义对象获取视图并仍然支持API 1.5相比,有什么好处 例如,假设我有Foo.java类: public class Foo extends Fragment { /** Title of the Foo object*/ private Stri
Android
开发时,您可以将目标(或最低)sdk设置为4(API 1.6),并添加Android兼容包(v4),以添加对片段的支持。昨天我这样做了,并成功地实现了片段
,以可视化自定义类中的数据
我的问题是:使用片段
与简单地从自定义对象获取视图并仍然支持API 1.5相比,有什么好处
例如,假设我有Foo.java类:
public class Foo extends Fragment {
/** Title of the Foo object*/
private String title;
/** A description of Foo */
private String message;
/** Create a new Foo
* @param title
* @param message */
public Foo(String title, String message) {
this.title = title;
this.message = message;
}//Foo
/** Retrieves the View to display (supports API 1.5. To use,
* remove 'extends Fragment' from the class statement, along with
* the method {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)})
* @param context Used for retrieving the inflater */
public View getView(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//getView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (container == null) {
return null;
}
View v = inflater.inflate(R.layout.foo, null);
TextView t = (TextView) v.findViewById(R.id.title);
t.setText(this.title);
TextView m = (TextView) v.findViewById(R.id.message);
m.setText(this.message);
return v;
}//onCreateView
}//Foo
这两种方法的创建和使用都非常简单,例如,在一个要显示列表
的活动中(例如,通过编程将每种方法添加到滚动视图
),那么片段
是否真的非常有用,或者它们只是获得视图的一种过分美化的简化,例如,通过上面的代码?我想说片段在两种情况下很有用:如果您在某些设备/方向上拆分视图,并在两个活动中显示它们,在另一个设备上显示所有内容。如果你在平板电脑上或者甚至在手机的横向模式下使用,这将是一个用例:例如,你在一个屏幕上显示项目列表和详细信息。在手机或肖像模式下,您只需显示一个部分
另一个用例是可重用视图。因此,如果您有一些在不同活动上可见的视图,并且还执行了一些操作,那么您可以将此行为放到一个片段中,然后重用它。显然,您也可以使用自定义小部件来实现这一点
我不认为有任何理由在每个视图中都使用片段,我想这只是一种开销。我只是在第一个用例中使用它们,我想在这里说这是一个简化
Android在Android 3.0(API级别11)中引入了片段,主要是为了在平板电脑等大屏幕上支持更动态、更灵活的UI设计。因为平板电脑的屏幕比手机大得多,所以有更多的空间来组合和交换UI组件。片段允许这样的设计,而无需管理视图层次结构的复杂更改。通过将活动的布局划分为片段,您可以在运行时修改活动的外观,并将这些更改保留在由活动管理的后堆栈中
你可以读更多
场景活动拆分屏幕-我们有一个布局和一个活动处理左右屏幕部分
场景片段活动我们有一个主屏幕布局,一个左一个右
如果您有简单的应用程序,那么场景一是好的
如果您想要有多个片段和多个片段活动,那么场景二很好
你可以把它们结合起来。还可以在片段之间进行交互
我有分屏Fragmentactivity,我可以用“意图附加”来调用它,并告诉Fragmentactivity要加载哪个片段。片段是好的,因为它们不在清单中,所以您可以创建可重用的片段和FragmentActivity
但这会让你的项目变得更大。但如果你做一个大项目,你可以节省很多。因为您可以使用相同的片段或相同的片段活动
我觉得这些碎片来得有点晚,所以你们必须试着用新的方式思考。
也许只是试着把你的活动转换成零碎的活动。稍后尝试寻找可重用代码并从中生成片段
这是有用的,但我现在不知道怎么做。但我有一些想法
这一直是个问题。Android团队做了一些思考,没有人知道什么是好的。因为我们很难像以前那样学习,现在又有了一些新的东西
在我看来,这是好的,但不是谷歌告诉我们的原因。使用片段的主要原因是用于backbackback和lifecycle特性。否则,自定义视图重量更轻,实现更简单。
起初,我实际上尝试使用自定义视图构建一个手机/平板电脑应用程序。在手机和平板电脑上,一切似乎都能正常工作,甚至可以从单面板切换到分面板。我遇到的麻烦是后退按钮和生命周期。因为我只是手动更新视图…没有任何东西可以跟踪视图的历史及其状态。因此,“后退”按钮无法按预期工作,在生命周期事件期间(如旋转应用程序时),甚至很难重新创建最新状态。要解决这个问题,我必须将自定义视图包装成片段,并使用FragmentManager,以便保存和重新创建以前的状态
我在回答了一年前发布的一个类似问题后意识到:在CustomView上使用片段或活动时添加一个案例:
当您使用CursorLoader观察某些视图、ListView或TextView,并希望在您的ContentProvider在后端的数据更新时更新其显示值时(最常见的情况是您有一个服务,该服务通过定期轮询远程数据库/云的数据来更新您的本地数据库)上面所有评论都没有提到的一件大事是,即使Android停止活动并在您执行诸如更改设备方向之类的操作时重新启动,一个片段仍然驻留在内存中。这样做是出于性能原因,但如果您希望销毁片段,却发现它们不知从何处被重新创建,则也可能导致意外的结果。片段不必有UI,它们可以是可重用的行为。在这种情况下,视图是多余的。我已经在另一个问题中回答了这个问题。见T;dr-有时片段允许您创建比依赖自定义视图实现更多的可重用组件。查看链接了解原因。我已经阅读了所有文档,但是我正在寻找更好地解释其优点的东西,例如平板电脑或Backback感谢,这绝对是有帮助的