Phi*_*hil 102 android software-design android-lifecycle android-fragments android-view
开发时Android,您可以将目标(或最小)sdk设置为4(API 1.6)并添加android兼容包(v4)以添加支持Fragments.昨天我做了这个并成功实现Fragments了可视化来自自定义类的数据.
我的问题是:使用的好处是什么Fragments,而不是简单地从自定义对象获取View,并且仍然支持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
Run Code Online (Sandbox Code Playgroud)
这两种方法都非常简单,可以在一个Activity中使用,例如,有一个List<Foo>要显示的(例如,以编程方式将每个方法添加到a中ScrollView),所以它们Fragments真的很有用,或者它们只是一个过于美化的简化获取视图,例如通过上面的代码?
Hen*_*nry 168
使用Fragments的主要原因是用于Backstack和生命周期功能.否则,自定义视图更轻,更容易实现.
起初,我实际上尝试使用自定义视图构建手机/平板电脑应用.一切似乎都适用于手机和平板电脑,甚至可以从单面板切换到分割面板.我遇到麻烦的地方是后退按钮和生命周期.由于我只是手动更新视图...没有任何记录视图及其状态的历史记录.因此,后退按钮没有按预期工作,甚至很难在生命周期事件中重新创建最新状态,例如旋转应用程序时.为了解决这个问题,我必须将自定义视图包装在片段中并使用FragmentManager,以便保存和重新创建以前的状态.
我在回答之后意识到我在一年前发布了类似的问题: https ://stackoverflow.com/a/11126397/618881
Mar*_*yer 27
我会说碎片在两种情况下很有用:如果你在一些设备/方向上分割视图并在两个活动中显示它们,并在其他设备上显示所有内容.如果您在平板电脑上或甚至在手机上以横向模式进行操作,那将是一个用例:例如,您在一个屏幕上显示项目列表和详细信息.在手机或肖像模式下,您只需显示一个部分.
另一个用例是可重用的视图.因此,如果您有一些在不同活动中可见的视图并且还执行某些操作,您可以将此行为放入片段中,然后重复使用它.显然你也可以使用自定义小部件来做到这一点.
我不认为有任何理由为每个View使用Fragments,我想这只是一个开销.我只在第一个用例中使用它们,我在这里说它是一个简化.
| 归档时间: |
|
| 查看次数: |
43015 次 |
| 最近记录: |