2014-07-22 120 views
0

我试图让我的片段使用findFragmentById,但每次我在它的地方得到空,我也尝试使用findFragmentByTag并添加一个标记到我的添加事务,但也是这样。为什么findFragmentById总是返回null

以下代码是经修饰的空白起始模板(为简单起见)

公共类MainActivity延伸活动{

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null); 
    setContentView(R.layout.activity_main); 

    FragmentManager fragmentManager = getFragmentManager(); 

    if (savedInstanceState == null) { 
     fragmentManager.beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager 
      .findFragmentById(R.id.container); 

    if (placeholderFragment == null) { 
     Log.i("TAG", "placeholderFragment is null"); 
    } else { 
     Log.i("TAG", "placeholderFragment is not null"); 
    } 
} 

public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, 
       false); 
     return rootView; 
    } 
} 

}

我试图替换为add(R.id.container, new PlaceholderFragment(), "TAG")的添加然后尝试与findFragmentByTag("TAG")访问它也没有成功。

如何让我的代码按预期工作?

回答

3

我认为问题在于您在添加Fragment后立即尝试找到它。在那一小段时间内Fragment可能还没有添加。

你可以做的就是在添加它时已经有了片段。

findFragmentById()函数一般用于在其他函数中访问Fragments已经添加了一段时间后。

下面是一个例子

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(null); 
    setContentView(R.layout.activity_main); 

    FragmentManager fragmentManager = getFragmentManager(); 
    PlaceholderFragment placeholderFragment = new PlaceholderFragment(); 

    if (savedInstanceState == null) { 
     fragmentManager.beginTransaction() 
       .add(R.id.container, placeholderFragment).commit(); 
    } 
} 

public void anotherFunc() { 

    PlaceholderFragment placeholderFragment = (PlaceholderFragment) fragmentManager 
      .findFragmentById(R.id.container); 
} 
+0

烨,事实上,这是这个问题,谢谢 – Kaylee

相关问题