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

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

2013-10-25 11:26 417 查看

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开发相关文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐