Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套在另一个片段中的Android片段:getParentFragment()返回0_Android_Android Fragments_Fragmentpageradapter - Fatal编程技术网

嵌套在另一个片段中的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,我能够获得对父片段的引用。但是你给了我正确的想法,所以如果你更新你的代码,我会把它标记为接受。非常感谢。