java - FragmentPagerAdapter 未调用 getItem() 方法

标签 java android android-fragments android-viewpager android-fragmentactivity

我正在创建具有 Viewpager 和自定义 fragment 类的自定义 View 。问题是我的 getItem(int position) 没有被调用。即使这在另一个 pagerview 中也有效。请让我知道我的代码有什么问题。谢谢!!

 private void initView(Context context) {
                this.context = context;
                LayoutInflater inflater = LayoutInflater.from(context);
                rootView = inflater.inflate(R.layout.internal_training_view, this, true);
                Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
                ((HFTrainingActivityDashBord)context).setSupportActionBar(toolbar);
                ((HFTrainingActivityDashBord)context).setSupportActionBar(toolbar);
                mSectionsPagerAdapterInternal = new SectionsPagerAdapter(((HFTrainingActivityDashBord)context).getSupportFragmentManager());
                mViewPagerInternal = (CustomViewPager) findViewById(R.id.pager_hf_training);
                mViewPagerInternal.setOffscreenPageLimit(3);
                mViewPagerInternal.setAdapter(mSectionsPagerAdapterInternal);
                TabLayout tabs_hf = (TabLayout) findViewById(R.id.tabs_hf);
                tabs_hf.setupWithViewPager(mViewPagerInternal);

              }        
        public class SectionsPagerAdapter extends FragmentPagerAdapter {

                public SectionsPagerAdapter(FragmentManager fm) {
                    super(fm);
                }

                @Override
                public Fragment getItem(int position) {                       

                    return new IternalTrainingDashBoardFragment(position,context);
                }

                @Override
                public int getCount() {
                    // Show 4 total pages.
                    return 4;
                }

                @Override
                public CharSequence getPageTitle(int position) {
                    switch (position) {
                        case 0:
                            return "All";
                        case 1:
                            return "InProgress";
                        case 2:
                            return "Overdue";
                        case 3:
                            return "Not Started";


                    }
                    return null;
                }

            }

最佳答案

我认为问题在于您如何在 getItem() 方法中返回 fragments。在 fragment 中使用静态 newInstance() 方法来创建 fragment 。不确定您是否要使用其构造函数而不是 newInstance 工厂方法来调用 fragment 这是一个示例。

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            //Note I am using the Fragments static newInstance method(). You arent supposed to call a fragment using new
            return DetailInfoFragment.newInstance(someEntity);
        case 1:
            return DetailContentFragment.newInstance(someEntity);
        case 2:
            return DetailExtraFragment.newInstance(someEntity);
        default:
            return DetailInfoFragment.newInstance(someEntity);
    }
}

这是我的 DetailInfoFragment 类中的示例 newInstance

public static DetailInfoFragment newInstance(SomeEntity someEntity) 
{
    DetailInfoFragment fragment = new DetailInfoFragment();
    Bundle args = new Bundle();
    args.putParcelable(ARG_PARAM1, someEntity);
    fragment.setArguments(args);
    return fragment;
}

关于java - FragmentPagerAdapter 未调用 getItem() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48394658/

相关文章:

android - Android fragment : still click on previous fragment 中的问题

java - 将新数组条目与其所有祖先进行比较

java - 将数组列表中的数据从索引 n 替换为 x

java - Hadoop:MapReduce MinMax 结果与原始数据集不同

android - 所有 com.android.support 库必须使用相同版本的 appcompat-v7 :28. 0.0

android - 发送电子邮件时出现错误“没有应用程序可以执行此操作”

android - 如何获取 Intent 的发送者?

android - 无法从 fragment 开始新 fragment

java - ServiceRegistry创建SessionFactory有什么用

android - 根据打开的 fragment 更改操作栏中的选项菜单图标