FragmentPagerAdapter麻烦和苦恼:构造函数未定义

编辑:我已经重写了一些我的代码尝试并通过错误 (但现在的应用程序崩溃启动)。 首先,我的类现在扩展了FragmentActivity,以便我可以访问方法getSupportFragmentManager();. 然后,在创build,我改变了我的构造函数:

mTabsAdapter = new TabsAdapter(this.getSupportFragmentManager(), this, mViewPager); 

从那里,在我的子类中,我改变了代码来反映这个:

 public TabsAdapter(FragmentManager fm, Activity activity, ViewPager pager) { super(fm); mContext = activity; mActionBar = activity.getActionBar(); mViewPager = pager; mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } 

正如我所说,它仍然崩溃,在这一点上的任何想法?

开始原来的问题:我有以下错误:“构造函数FragmentPagerAdapter(FragmentManager)是未定义的”*

当我尝试执行以下行时:

super(activity.getFragmentManager()); 这一行遵循我的public TabsAdapter(Activity activity, ViewPager pager) {这是扩展FragmentPagerAdapter

基本上,我试图让我的8+片段应用程序(8片段,一个活动,其中包含一组ActionBar标签链接到每个片段[只有一个在这里看到简洁的缘故“loginTab”])。

这是我的整个代码:

编辑:我用于参考的页面: http : //developer.android.com/reference/android/support/v4/view/ViewPager.html

Android : Page Swiping using ViewPager

 package com.davekelley.polling; import java.util.ArrayList; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.widget.Button; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; public class Polling extends Activity { private ViewPager mViewPager; private TabsAdapter mTabsAdapter; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mViewPager = new ViewPager(this); mViewPager.setId(R.id.pager); setContentView(mViewPager); final ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayShowTitleEnabled(false); bar.setDisplayShowHomeEnabled(false); mTabsAdapter = new TabsAdapter(this, mViewPager); mTabsAdapter.addTab(bar.newTab().setText(“Simple”), LoginFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText(“Simple”), EconFragment.class, null); mTabsAdapter.addTab(bar.newTab().setText(“Simple”), PoliticsFragment.class, null); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt(“tab”, 0)); } } protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(“tab”, getActionBar().getSelectedNavigationIndex()); } public static class TabsAdapter extends FragmentPagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener { private final Context mContext; private final ActionBar mActionBar; private final ViewPager mViewPager; private final ArrayList mTabs = new ArrayList(); static final class TabInfo { private final Class clss; private final Bundle args; TabInfo(Class _class, Bundle _args) { clss = _class; args = _args; } } public TabsAdapter(Activity activity, ViewPager pager) { super(activity.getFragmentManager()); mContext = activity; mActionBar = activity.getActionBar(); mViewPager = pager; mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(ActionBar.Tab tab, Class clss, Bundle args) { TabInfo info = new TabInfo(clss, args); tab.setTag(info); tab.setTabListener(this); mTabs.add(info); mActionBar.addTab(tab); notifyDataSetChanged(); } public int getCount() { return mTabs.size(); } public Fragment getItem(int position) { TabInfo info = mTabs.get(position); return Fragment.instantiate(mContext, info.clss.getName(), info.args); } public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } public void onPageSelected(int position) { mActionBar.setSelectedNavigationItem(position); } public void onPageScrollStateChanged(int state) { } public void onTabSelected(Tab tab, FragmentTransaction ft) { Object tag = tab.getTag(); for (int i=0; i<mTabs.size(); i++) { if (mTabs.get(i) == tag) { mViewPager.setCurrentItem(i); } } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { } public void onTabReselected(Tab tab, FragmentTransaction ft) { } public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) { } public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { } public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) { } } } 

任何想法这里发生了什么,我能做些什么来解决它? 我的Fragment类目前非常简单,但最终会从SQL服务器加载数据(同时,它们只是返回一个简单的膨胀布局)。

Solutions Collecting From Web of "FragmentPagerAdapter麻烦和苦恼:构造函数未定义"

我已经解决了这个问题。 这是需要的无数解决scheme。

首先,我必须扩展FragmentActivity。

 public class Polling extends FragmentActivity { 

然后,当创build我的TabsAdapter时,我必须发送一个调用(FragmentActivity本身):

 mTabsAdapter = new TabsAdapter(this, mViewPager); 

然后,当在TabsAdapter子类中构造函数时,我不得不将参数更改为FragmentActivity而不是Activity:

 public TabsAdapter(FragmentActivity activity, ViewPager pager) { super(activity.getSupportFragmentManager()); 

最后,我不得不在我的Fragment类中更改我的import语句,以反映使用兼容性库而不是常规片段包:

 import android.support.v4.app.Fragment; 

所以,现在我的ViewPagerfunction。 当然,单击每个单独的选项卡图标以在选项卡之间切换不再有效(因此,只要发送此消息,我正在使用该解决scheme)。 无论如何,现在的ViewPagerfunction,我可以继续在我的应用程序中更紧迫的问题。 感谢LouisLouis让我走上了正确的道路。 我最终使用CountingFragment.java来帮助我查看错误的位置,以及ActionBarSherlock代码中的FragmentTabsPager.java,以确定是否需要指定FragmentActivity。

你需要改变线条

 public TabsAdapter(Activity activity, ViewPager pager) { super(activity.getFragmentManager()); 

 public TabsAdapter(Activity activity, ViewPager pager) { super(activity.getSupportFragmentManager()); 

这将提供android.support.v4.app.FragmentManager的构造函数所需要的android.support.v4.app.FragmentPagerAdapter 。 您目前正在提供android.app.FragmentManager ,它是从activity.getFragmentManager()返回的内容。 这是导致types不匹配,这是您的错误的根本原因。