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();
    }

在替換以後立刻android

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中的Fragmentide

Fragment詳解之三——管理Fragment(1)佈局

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

相關文章
相關標籤/搜索