getSupportFragmentManager()。findFragmentById使用FragmentPagerAdapter和ViewPager返回null

时间:2017-12-03 03:52:05

标签: java android android-fragments android-fragmentactivity

我使用“getSupportFragmentManager()检查了所有类似的票证.findFragmentById返回null”但没有帮助。

在Android Studio 3.0.1中,我刚刚创建了一个基于“选项卡式活动”模板项目和导航样式设置为“操作栏选项卡(使用ViewPager)”的新项目。

然后我添加了3个xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment1">
<!-- @+id/fragment2 in fragment2.xml-->
<!-- @+id/fragment3 in fragment3.xml-->
...some controls
</LinearLayout>

以及3个相应的.java类文件

public class Fragment1 extends Fragment {
   //Fragment2, Fragment3

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1, container, false);
        //R.layout.fragment2, R.layout.fragment3 
    }

}

在MainActivity类的SectionsPagerAdapter类中,我将overriden方法getItem更改为以下内容。

@Override
public Fragment getItem(int position) {
     // getItem is called to instantiate the fragment for the given page.
     // Return a PlaceholderFragment (defined as a static inner class below).
     switch(position) {
         case 0: return new Fragment1();
            case 1: return new Fragment2();
            case 2: return new Fragment3();
            default:
                return new Fragment1();

     }
     //return PlaceholderFragment.newInstance(position + 1);
}

最后,我想在我的第一个片段中触发一些东西。

 public void onClick(View view) {
       Fragment1 frag1 = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1);
 }

我的问题是当我点击工具栏中的一个按钮并且我到达它的onClick事件(在MainActivity中)时,我的frag1总是为空!

请帮忙! :)

1 个答案:

答案 0 :(得分:0)

你不应该像这样覆盖 getItem

我建议如下:

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public SectionsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    public void setFragments(List<Fragment> fragments) {
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }


}

如果你想得到你想要的任何片段,只需打电话

((FragmentCallBack)sectionsPagerAdapter.get(thePositionOfYourFragment))
.trigger();