zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Exchanger
    信号量Semaphore
    CountDownLatch
    Condition
    WCF接口实例介绍
    时间显示
    pymysql-execute
    python之迭代器与生成器
    python之装饰器
    python之函数
  • 原文地址:https://www.cnblogs.com/as3lib/p/6135609.html
Copyright © 2011-2022 走看看