Java 使用泛型类型的片段实例化,OnCreate方法不';不打电话

Java 使用泛型类型的片段实例化,OnCreate方法不';不打电话,java,android,generics,android-fragments,android-adapter,Java,Android,Generics,Android Fragments,Android Adapter,我有一个适配器,它以这种方式创建片段: 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 pub

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

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;
   }
}

首先,您的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;
    }
}

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

您是否将适配器分配给了viewpager?@zec是的,我已经分配了。
getItem()
&
getCount()
都需要过度使用。那么,您是否计划每个片段只使用一个适配器/viewpager?是的,我已经覆盖了这两个。我建议将跟踪语句放置在适配器中,看看为什么不创建片段<代码>类看起来可疑,但这只是因为我从未使用过它。除此之外,它似乎应该可以工作。lol这没有错,因为他们只有一个log语句,我很确定这只是一个代码片段。如果BarFragment是在扩展FragmentActivity,那将是正确的方法。因为它是对片段的扩展,所以应该使用onCreateView方法。来源:好了,朋友-
public class BarFragment extends Fragment{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "on create view");
    }
}
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;
    }
}