【问题标题】:Fragment instantiation using generic type, OnCreate method Doesn't call使用泛型类型的片段实例化,OnCreate 方法不调用
【发布时间】:2015-08-21 13:42:45
【问题描述】:

我有一个以这种方式创建片段的适配器:

public class FooAdapter<T extends Fragment> extends FragmentPagerAdapter {
   private Class<T> c;
   public FooAdapter(FragmentManager fm,Class<T> c) {
      super(fm);
      this.c = c;
   }

   @Override
   public Fragment getItem(int position) {
      try {
         T fragment = c.newInstance();
         return fragment;
      } catch (InstantiationException e) {
         e.printStackTrace();
      } catch (IllegalAccessException e) {
         e.printStackTrace();
      }
      return null;
   }
}

适配器的实例化:

new FooAdapter<BarFragment>(getSupportFragmentManager(),BarFragment.class)

我在 BarFragment 的 onCreate(and onAttach,onCreateView) 中添加了日志,但没有任何记录!

public class BarFragment extends Fragment{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "on create view");
    }
}

【问题讨论】:

  • 您是否将适配器分配给 viewpager?
  • @zec 是的,我已经分配了。
  • getItem()getCount() 都需要被覆盖。那么您是否计划每个片段仅使用 1 个适配器/viewpager?
  • 是的,我已经覆盖了它们。
  • 我建议在你的适配器中放置跟踪语句,看看为什么你的片段没有被创建。 Class&lt;T&gt; 看起来很可疑,但这只是因为我从未使用过它。除此之外,它似乎应该可以工作。

标签: java android generics android-fragments android-adapter


【解决方案1】:

对于初学者,你的 onCreate 方法是错误的,你应该使用 onCreateView 方法并忘记 onCreate。

类似这样的:

public class BarFragment extends Fragment{

    public BarFragment(){

    }

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(LAYOUT YOU WANT TO INFLATE, container, false);

        return rootView;
    }
}

我现在将更深入地研究您的适配器代码。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2013-10-03
  • 2011-04-02
相关资源
最近更新 更多