Android开发笔记(10)——使用Fragment传递

转载请注明:http://www.cnblogs.com/igoslly/p/6911165.html

 

由于最近废寝忘食地在开发App,没来得及及时做总结,没有用很高级的部件,勉强也使用一些功能完成了自己的第一个App,撒花~~~

接下来都是自己在开发中使用后的一些经验,也是和他人学习实践后的成果,主要是关于Fragment。

 

 

使用Fragment传递

添加Fragment


添加 Fragment 有静态添加 & 动态添加两种方式,

静态添加是在 Layout 布局中添加 <Fragment> 控件,由于可以设置 id,则可通过 id 寻找

<Fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment1"/>


动态添加fragment则完全在程序中定义添加 添加同时设定 TAG,通过 TAG 寻找实例(见后 Transaction)
// 对activity中的Fragment进行管理,需要通过Fragment Manager
FragmentManager manager = getFragmentManager();
manager.findFragmentById();  //根据ID查找
manager.findFragmentByTag();//根据TAG查找
manager.getFragments();//获取所有被ADD进Activity中的Fragment 

 


Fragment Manager & Transaction

FragmentManager
,获取当前Activity的所有Fragment,形成fragment栈
FragmentTransaction,则可以管理当前的Fragment Transcation 控制 Fragment 的显示、添加、替换等等,如 add / remove / replace commit() 对操作的 Fragemnt 提交到系统,进行显示
replace(R.id.content_frame,fragment).commit();  //替换——删除添加操作
add(R.id.container,fragment1,String tag);    //添加fragment,并设置动态查找TAG
remove(fragment1);                          //删除

故而 Fragment 常被用于导航栏的切换内容,每点击导航栏不同图标,系统便调用响应的 Fragment 布局和内容,较为方便




Activity或Fragment向Fragment之间的参数传递

Bundle args = new Bundle();
args.put("value_key",value);

      
value_key
是在传输读取中约定的关键词,传输值可以为多种类型,int,String,Array等等

Fragment fragment = new Fragment();
fragment.setArguments(args);      //将bundle传给fragment

fragment 读取值

red = getArguments().getInt("value_key1");
yellow = getArguments().getString("value_key2");


当需要从 Fragment 返回原活动时,需要设置 fragment 连接


aheadDialogue.setTargetFragment(CompetitionFragment.this,REQUEST_CODE);
getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment1).addToBackStack(null).commit();
getFragmentManager().popBackStack();  //返回
 
原Fragment接收返回值,在onActivityResult进行定义
        request_code   是用户自定义  integer
        resultCode       通常是活动状况,是否正常结束


public void onActivityResult(int requestCode, int resultCode, Intent data) {
//        super.onActivityResult(requestCode, resultCode, data);
//        可判断不同requestCode接受不同返回值操作
    if (requestCode==0x1001) {
        if (resultCode != Activity.RESULT_OK) { //这里再对activity状态进行判断
            return;
        } else {
            hitPlayer = data.getStringExtra("hitplayer");
            hitNumber = data.getIntExtra("hitnumber", 0);
        }
    }
    if (requestCode==0x1111) {
        //blablabla
    }
 }

 


推荐介绍Fragment挺详细的blog:http://blog.csdn.net/harvic880925/article/details/44927375

本笔记内容均为个人学习整理,转载请注明博客园-igoslly

posted @ 2017-05-27 03:02  Arya.Mo  阅读(446)  评论(0编辑  收藏  举报