嵌套在另一个片段中的Android片段:getParentFragment()返回0
基本上情况是这样的:我有一个嵌套在另一个片段中的Android片段:getParentFragment()返回0,android,android-fragments,fragmentpageradapter,Android,Android Fragments,Fragmentpageradapter,基本上情况是这样的:我有一个活动,它在FragmentPagerAdapter中显示了三个片段,在其中一个片段中,我嵌套了另一个片段。我添加了如下片段: fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(rootView.getId(), new MainPageFragment(), "lpt2"); fragmentTransaction.commi
活动
,它在FragmentPagerAdapter
中显示了三个片段
,在其中一个片段
中,我嵌套了另一个片段
。我添加了如下片段:
fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(rootView.getId(), new MainPageFragment(), "lpt2");
fragmentTransaction.commit();
当我尝试在MainPageFragment()
的内部调用getParentFragment()
时,它返回null
。
这怎么可能?我查看了stackoverflow和其他博客上的多篇文章,他们都得出结论,如果将一个片段嵌套在另一个片段中,调用getParentFragment
应该返回其父片段。返回null
表示父级是所述的活动。事实并非如此。请告诉我我犯了一些愚蠢的错误:\
这是片段
,它是主活动
public class MainPage extends Fragment {
private FragmentTransaction fragmentTransaction;
private View rootView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
global_var = new Global();
rootView = inflater.inflate(R.layout.main_page, container, false);
return rootView;
}
@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(rootView.getId(), new MainPageFragment(), "lpt2");
fragmentTransaction.commit();
}
}
这是主页片段的子片段
public class MainPageFragment extends Fragment{
private View rootView;
private Fragment parentFragment;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.main_page_list, container, false);
if (getParentFragment() == null) Log.i("damn", "it");
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
}
}
如果我需要提供更多的代码,请告诉我,我提取了诸如ListView
之类的内容,因为我认为这与此无关
编辑:我正在使用android.support.v4.app检查您是否通过
FragmentManager
引用了FragmentPagerAdapter
中的所有片段,然后使用getParentFragment()
。这可能会对您有所帮助。谢谢您的回复!我立即尝试了你的方法,不幸的是它没有起作用,因为我被迫使用android.support.v4.app,它不允许findFragmentByTag(String)
。另外,我不确定这种方法是否有效,因为我必须在嵌套的片段中调用getFragmentManager()
,查看您是否使用了android.support.v4.app,然后您必须使用getSupportFragmentManager()而不是getFragmentManager()。顺便说一句,findFragmentByTag(String)是两个see都允许的。我试过了,它给我一个错误,说getSupportFragmentManager()
对于类型MainPageFragment
以及MainPage
:\n我想你已经用activity扩展了你的activity,检查这应该是android.support.v4.app.FragmentActivity而不是简单的Activity我终于找到了答案。由于我使用的是FragmentPagerAdapter',因此我需要将对FragmentManager`的引用向下传递到我的片段,然后片段再次返回一个列表,根据给定的id,我能够获得对父片段的引用。但是你给了我正确的想法,所以如果你更新你的代码,我会把它标记为接受。非常感谢。