Fragment使用findFragmentById返回null

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                replaceFragment(new AnotherRightFragment(),"anotherRightFragment");
//                //在activity中获得fragment实例
//                AnotherRightFragment ar = (AnotherRightFragment)getFragmentManager().findFragmentByTag("anotherRightFragment");
//                Log.d(TAG, "onClick: "+ar);
//                ar.setText("文字哈");
                break;
            case R.id.btn2:
                AnotherRightFragment ar = (AnotherRightFragment)getFragmentManager().findFragmentByTag("anotherRightFragment");
                Log.d(TAG, "onClick: "+ar);
                ar.setText("文字哈");
                break;
            default:
                break;
        }
    }
    /**
     *动态添加fragment
     */
    private void addFragment(Fragment fragment){
        FragmentManager fm = getFragmentManager();
        fm.beginTransaction().add(R.id.right_layout,fragment).commit();
//        transaction.addToBackStack(null);
    }
    /**
     *动态添加fragment
     */
    private void replaceFragment(Fragment fragment,String tag){
        FragmentManager fm = getFragmentManager();
        fm.beginTransaction().replace(R.id.right_layout,fragment,tag).commit();
    }

在替换之后马上

AnotherRightFragment ar = (AnotherRightFragment)getFragmentManager().findFragmentByTag("anotherRightFragment");
会获取不到这个fragment。
findFragmentById是获取 xml布局文件显示<fragment android:name="+@id/fid"/> 声明的。
findFragmentByTag能动态获取
查了下fragment的生命周期, 添加一个碎片->onAttach()->onCreate()->onCreateView()
/**
*动态添加fragment
*/
private void replaceFragment(Fragment fragment,String tag){
FragmentManager fm = getFragmentManager();
FragmentTransaction tc = fm.beginTransaction();
tc.replace(R.id.right_layout,fragment,tag);
tc.addToBackStack(null);
tc.commit();
//立即执行
fm.executePendingTransactions();
}
add或者replace只是添加到任务,如果立即执行得加上executePendingTransactions。这样才能紧跟着通过fragmentmanager获取fragment

manager.findFragmentById(); //根据ID来找到对应的Fragment实例,主要用在静态添加fragment的布局中,因为静态添加的fragment才会有ID
manager.findFragmentByTag();//根据TAG找到对应的Fragment实例,主要用于在动态添加的fragment中,根据TAG来找到fragment实例
manager.getFragments();//获取所有被ADD进Activity中的Fragment

Fragment详解之三——管理Fragment(1)

http://blog.csdn.net/harvic880925/article/details/44927375

转载于:https://www.cnblogs.com/as3lib/p/6135609.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值