使用newInstance()来实例化fragment 并传递数据
来源:互联网 发布:2016制造业行业数据 编辑:程序博客网 时间:2024/05/16 05:39
好问题。答案就是这篇文章的题目所建议的,这是一种合理的设计。在这种情况下,newInstance()方法是一种“静态工厂方法",让我们在初始化和设置一个新的fragment的时候省去调用它的构造函数和额外的setter方法。为你的Fragment提供静态工厂方法是一种好的做法,因为它封装和抽象了在客户端构造对象所需的步骤。例如,考虑下面的代码:
public class MyFragment extends Fragment { /** * 静态工厂方法需要一个int型的值来初始化fragment的参数, * 然后返回新的fragment到调用者 */ public static MyFragment newInstance(int index) { MyFragment f = new MyFragment(); Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } }
不要让客户端去调用默认的构造函数,然后手动地设置fragment的参数。我们直接为它们提供一个静态工厂方法。这样做比调用默认构造方法好,有两个原因:一个是,它方便别人的调用。另一个是,保证了fragment的构建过程不会出错。通过提供一个静态工厂方法,我们避免了自己犯错--我们再也不用担心不小心忘记初始化fragmnet的参数或者没正确设置参数。
总的来说,虽然两者的区别只在于设计,但是他们之间的差别非常大。因为提供静态工厂方法有向上抽象了一个级别,让代码更容易懂。
译者注:其实提供静态工厂而不是使用默认构造函数或者自己定义一个有参的构造函数还有至关重要一点。fragmnet经常会被销毁重新实例化,Android framework只会调用fragment无参的构造函数。在系统自动实例化fragment的过程中,你没有办法干预。一些需要外部传入的参数来决定的初始化就没有办法完成。使用静态工厂方法,将外部传入的参数可以通过Fragment.setArgument保存在它自己身上,这样我们可以在Fragment.onCreate(...)调用的时候将这些参数取出来。
传递数据
public static LoginFragment newInstance(String param) { LoginFragment fragment = new LoginFragment(); Bundle args = new Bundle(); args.putString("name", param); fragment.setArguments(args); return fragment; }
在fragment 的onCreatView里获取数据
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View myView = inflater.inflate(R.layout.xxx, container, false); String args = getArguments().getString("name"); return myView;}在Activity里LoginFragment loginFragment= LoginFragment.newInstance(想要传递的参数); SignUpFragment signUpFragment= SignUpFragment.newInstance(想要传递的参数); List<Fragment> allFragment = new ArrayList<Fragment>(); allFragment.add(loginFragment); allFragment.add(signUpFragment);
0 0
- 使用newInstance()来实例化fragment 并传递数据
- 【译】使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- 使用newInstance()来实例化fragment
- Android使用newInstance()实例化fragment&setArguments()传递参数
- Android 从源码的角度分析——为什么要用newInstance来实例化Fragment
- Android中利用newInstance()方法实例化fragment
- Fragment之间使用Bundle传递对象,数据,序列化,集合
- 创建Fragment使用 构造函数 还是 newInstance()
- 使用Bundle在fragment之间传递数据
- Swift - 使用导航条和导航条控制器来进行页面切换并传递数据
- android两个fragment的使用localBroadcastManager来传递参数
- 使用EventBus来实现数据的传递
- Android fragment数据传递
- 向Fragment传递数据
- UVa 489:Hangman Judge
- EXCEL通过配置导入规则,实现任意格式EXCEL文件解析
- 0409
- 分布式系统入门/相关BLog索引
- 实现网页文字向上滚动
- 使用newInstance()来实例化fragment 并传递数据
- java面试需要掌握知识点
- android中实现PopupWindow跟随ProgressBar进度显示
- [转载]Java程序员掌握的10大项知识体系--精通太难说出口
- Socket Error 表
- spring事物
- Android ListView.setsetOnItemClickListener
- 【设计模式】备忘录模式
- Linux 系统链接装载可执行程序