FragmentPagerAdapter проблемы и проблемы: Constructor Undefined

Изменить: я переработал часть своего кода, чтобы попытаться пройти мимо ошибки (но теперь приложение вылетает при запуске). Во-первых, мой класс теперь расширяет FragmentActivity, поэтому я могу получить доступ к этому методу, getSupportFragmentManager () ;. Затем внутри create я изменил свой конструктор:

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-сервера (в то же время они просто возвращают простой раздутый макет).

Я решил проблему. Это было множество решений, которые требовались.

Во-первых, мне пришлось расширить FragmentActivity.

 public class Polling extends FragmentActivity { 

Затем, создав свой TabsAdapter, мне пришлось отправить вызов (сам FragmentActivity):

 mTabsAdapter = new TabsAdapter(this, mViewPager); 

Затем, создав конструктор в подклассе TabsAdapter, мне пришлось изменить параметр на FragmentActivity, а не на Activity:

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

Наконец, мне пришлось изменить оператор импорта в своих классах фрагментов, чтобы отразить использование библиотеки совместимости, а не обычного пакета фреймов:

 import android.support.v4.app.Fragment; 

Итак, теперь работает мой ViewPager. Конечно, щелчок по каждому отдельному значку вкладки для переключения между вкладками больше не работает (поэтому я работаю над этим решением, как только я отправлю это сообщение). Несмотря на это, теперь, когда функция ViewPager работает, я могу перейти к более насущным проблемам в моем приложении. Спасибо Луи Луис за то, что он начал меня по правильному пути. В конечном итоге я использовал CountingFragment.java, чтобы помочь мне увидеть, где были мои ошибки, а также FragmentTabsPager.java из кода ActionBarSherlock, чтобы определить необходимость указания 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() . Это вызывает несоответствие типа, которое является основной причиной вашей ошибки.

Intereting Posts
Проблемы API MapView OutOfMemoryError Google API Как получить имя файла из uri? Java.io.FileNotFoundException: com / google / inject / internal / util / $ Finalizer.class в начале приложения для Android Как получить ширину строки на Android? Обратный вызов JavaScript для Android WebView для оригинального представления Runtime Exception при использовании настроек в Android (я следую за курсом разработчика Android udacity) Android: понимание того, как начинается действие при запуске приложения Круговая голосовая анимация в Android Snackbar не работает в классе фрагментов ORMLite createOrUpdate кажется медленным – что такое нормальная скорость? Проведите по экрану с помощью jQuery Mobile 1.2, PhoneGap 2.1 и Android 4.0.4 не работает должным образом CompileKotlin block in build.gradle file throws error "Не удалось найти метод compileKotlin () для аргументов " Использование библиотеки поддержки разработки в Eclipse Android для MonoDevelop на Ubuntu Как использовать андроидные библиотеки (apklibs) с maven и eclipse?