您的位置:首页 > 移动开发 > Android开发

【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器

2015-12-15 13:29 549 查看
目录(?)[-]

Transaction的一些操作

再谈FragmentManager

调用其他fragment的方法

唤起activity

唤起fragment和相互通信

一些其它

Transaction的一些操作

Transaction提供add()、hide()、show()、remove()等功能。下面我们利用这些功能通过fragment的隐藏和显示,为用户提供切换的效果。

public void showDetails(int index){
if(index <0)
index = 0;
//将所有书的简介都生成fragment,通过add()加入容器中
FragmentTransaction ft = getFragmentManager().beginTransaction();
if(details == null){
details = new DetailFragment[BooksInfo.TITLES.length];
for(int i = 0; i < details.length; i ++){
details[i]= DetailFragment.newInstance(i);
ft.add(R.id.details,details[i]); //或者使用add(id, fragment, tag),同时为fragment指定tag
}
}
//根据用户点击的书目序号,将相应的简介显示,而将其他简介隐藏。
for(int i = 0 ; i< details.length; i ++){
if(i == index)
ft.show(details[i]);
else
ft.hide(details[i]);
}
//任何fragment transaction处理后,都通过commit()进行确认。
ft.commit();
}

在之前的基础小例子中,使用了replace(),相当于执行了remove()和add()的操作。commit()是加入UI线程的执行操作。

再谈FragmentManager

FragmentManager是在activity中与fragment对象进行互操作的接口,在activity和fragment(已与activity关联attach)中可以通过getFragmentManager()获取。通过管理器,可以获得fragement transaction,根据id,tag等获取fragment。

我们可以通过管理器的dump()功能输出debug信息。或者使用getFragmentManager().enableDebugLogging(true);来提供相关的debug功能。

调用其他fragment的方法

FragmentManager管理与activity相关的所有fragment。如果在fragment A中要调用到Fragment B的某个方法,可以通过管理器找到其他fragment的对象,如下处理:

FragmentB fragOther = (FragmentB)getFragmentManager().findFragmentByTag(“b”);
fragOther.someMethod( … );

唤起activity

在fragment可以直接使用startActivity()和startActivityForResult()方法,以及回调函数onActivityResult()。

唤起fragment和相互通信

如果在fragment A中要唤起 fragment B,在FragmentA中处理如下:

FragmentB bFrag = new FragmentB();
bFrag.setTargetFragment(this, 0);
getFragmentManager()fm.beginTransaction().add(bFrag, "work").commit();

创建和通过transaction加入没有什么特别,关键是setTragetFragment(),这样在FragmentB中就可以获得FragmentA的对象,可调用FragmentA的方法,Fragment B的代码例子如下:

TextView tv = (TextView)getTargetFragment().getView().findViewById(R.id.text1);
tv.setText(“Set from the called fragment”);

一些其它

有时在应用中为了某种逻辑,使用没有view层级的,即不可视的fragment,用之存储一些信息,当activity或者fragment由于UI配置改变进行re-create时,提供帮助。

在基础小例子中,学习了Fragment类以及子类ListFragment,此外还有DialogFragment,PreferenceFragment和WebViewFragment。

本博文涉及的例子代码,可以在Pro Android学习:Fragment中下载。

相关链接: 我的Android开发相关文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: