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="[email protected]/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

时间: 2024-08-10 21:28:07

Fragment使用findFragmentById返回null的相关文章

android - Fragment getView() 总是返回null

如果你在使用Fragment的时候,有时会遇到调用Fragment.getView()的时候,总是返回一个null值. 可能出现此问题的原因是,你在Activity中,调用adapter.getItem()来获取当前Fragment. 大概如下 int index= _viewPaper.getCurrentItem(); Fragment fragment=_myFragmentAdapter.getItem(index); //这一步总是返回null值 View view= fragment

【Fragment精深系列5】fragment findViewById()返回null完全解析

一.引入 ??你是不是经常遇到在fragment中调用findViewById方法寻找fragment布局文件中的控件返回null的现象.我之前也遇到了这个问题,虽然后来解决了,但是心中一直有疑惑,最近有时间停下来,结合别人的解答和自己的思考,对这个问题进行彻底的梳理. 二.使用getActivity().findViewById 1.getActivity的介绍 ??Fragment中有一个getActivity()的方法.返回与Fragment关联的Activity对象(通过该对象可以查找a

Android开发:getViewById返回null的原因定位

最近在研究开发一些基于Android的App,遇到了一些问题,其中一个比较关键的是在Activity中的onCreate()方法中获取Button对象,代码大概如下: private Button mTrueButton; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz); mTr

关于GestureDetector的onFling方法e1返回null问题

解决办法: 定义一个MotionEvent对象,在ondown里面赋值  private MotionEvent mLastOnDownEvent = null; @Override         public boolean onDown(MotionEvent arg0) {          mLastOnDownEvent=arg0;         return false;       } @Override     public boolean onFling(MotionEve

PHP json_decode返回null解析失败原因

在PHP5.4之前 json_decode函数有两个参数json_decode有两个参数,第一个是待解析的字符串,第二个是是否解析为Arrayjson_decode要求的字符串比较严格:(1)使用UTF-8编码(2)不能在最后元素有逗号(3)不能使用单引号(4)不能有r,t,如果有请替换所以问题来了,不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,如下处理才能正确解析json数据: $result = json_decode(trim($contents,

Java Socket编程readLine返回null,read返回-1的条件

客户端正常关闭socket的时候,服务器端的readLine()方法会返回null,或者read()方法会返回-1 Java Socket编程readLine返回null,read返回-1的条件,布布扣,bubuko.com

一个开发原则,永远不要返回NULL

看一篇文章:10个经典的java开发原则,里面一个原则:永远不要返回NULL. 为什么,因为很多代码都是 a.b(......).c(...) 这么连着调用.如果每层调用都要检查是否为空的话,代码就太难看了. 但是不返回null,返回什么呢?显然要反悔一个类的实例,但是怎么保证得到的结果是预期的呢,也就是说,怎么能保证这样虽然不会报“未交对象引用设置到对象的实例”(实际上就是空引用)这个错误,但是能得到“正确”的结果呢.显然,应该是nul但是没有返回null是得不到正确的结果,但是我们要保证结果

WORD Application.Documents.Open函数返回null的一种解决方法

DCOM Config Setting for "Microsoft Office Word 97 - 2003 Document" 内部配置一切正常,但Application.Documents.Open函数还是返回null.下面是一个解决方法: "C:\Windows\SysWOW64\config\systemprofile\"目录下创建一个"Desktop"目录. WORD Application.Documents.Open函数返回nu

Attempt to write to field &#39;android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager&#39; on a null object reference

E/AndroidRuntime﹕ FATAL EXCEPTION: mainProcess: org.example.magnusluca.drawertestapp, PID: 3624java.lang.NullPointerException: Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on