GetSupportFragmentManager () не определен

Я получаю следующую ошибку: «Метод getSupportFragmentManager () не определен для типа new View.OnClickListener () {}" в моем файле фрагмента, показанном ниже.

У меня есть библиотека совместимости, на которую ссылается ABS, и правильный импорт. Я переустановил библиотеку ABS с библиотекой совместимости, очистил проект, перезапустил Eclipse, но ничего не сработало.

По сути, я пытаюсь получить фрагмент, чтобы показать выбор даты через фрагмент диалога. После того, как дата выбрана, она должна быть возвращена фрагменту, чтобы его можно было использовать для расчета информации, основанной на этой дате.

Вот код для моего фрагмента:

package com.owentech.abstabsviewpager; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentActivity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import com.actionbarsherlock.app.SherlockFragment; public class ObstetricsFragment1 extends SherlockFragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Fragment Layout View view = inflater.inflate(R.layout.obstetricsfragment1, container, false); Button mPickLMPDate = (Button) view.findViewById(R.id.pickLMPDate); mPickLMPDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); d.show(getSupportFragmentManager(), "dialog"); } }); return view; } public Dialog onCreateDialog(Bundle savedInstanceState) { // TODO Auto-generated method stub return null; } } 

Вот код фрагмента диалога:

 package com.owentech.abstabsviewpager; import android.app.Dialog; import android.os.Bundle; import android.widget.DatePicker; import android.app.DatePickerDialog; public class LMPDatePickerDialogFragment extends ObstetricsFragment1 implements DatePickerDialog.OnDateSetListener { static LMPDatePickerDialogFragment newInstance() { LMPDatePickerDialogFragment d = new LMPDatePickerDialogFragment(); return d; } private int mLMPYear; private int mLMPMonth; private int mLMPDay; public Dialog onCreateDialog(Bundle savedInstanceState) { return new DatePickerDialog(getActivity(), this, mLMPYear, mLMPMonth, mLMPDay); } public void onDateSet(DatePicker view, int year, int month, int day) { mLMPYear = year; mLMPMonth = month; mLMPDay = day; } } 

Наконец, вот код для моей деятельности:

 package com.owentech.abstabsviewpager; import java.util.ArrayList; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import android.widget.TextView; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.app.ActionBar.Tab; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; public class Obstetrics extends SherlockFragmentActivity { ViewPager mViewPager; TabsAdapter mTabsAdapter; TextView tabCenter; TextView tabText; // START Action Bar Menu Items @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { switch (item.getItemId()){ case R.id.menuLog: ChangeLog cl = new ChangeLog(this); cl.getFullLogDialog().show(); return true; case R.id.menuEmail: Intent emailIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:support@medicaldoctorapps.com")); startActivity(emailIntent); return true; case R.id.menuRate: Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=appinventor.ai_shawn_m_gee.MedicalDoctor")); startActivity(browserIntent); return true; case android.R.id.home: // App icon in action bar clicked; go home Intent intent = new Intent(this, Home.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; case R.id.menuExit: this.finish(); return true; default: return super.onOptionsItemSelected(item); } } //END Action Bar Menu Items // START Tabs View Pager (Add tabs by adding mTabsAdapter.addTab) @Override public void onCreate(Bundle savedInstanceState) { // Information you want returned to your application, via onCreate(), if the activity is destroyed and restarted due to some implicit reason super.onCreate(savedInstanceState); mViewPager = new ViewPager(this); mViewPager.setId(R.id.pager); setContentView(mViewPager); ActionBar bar = getSupportActionBar(); bar.setDisplayHomeAsUpEnabled(true); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mTabsAdapter = new TabsAdapter(this, mViewPager); mTabsAdapter.addTab( bar.newTab().setText("Wheel"), ObstetricsFragment1.class, null); mTabsAdapter.addTab( bar.newTab().setText("Physical"), HistoryPhysicalFragment2.class, null); mTabsAdapter.addTab( bar.newTab().setText("ROS"), HistoryPhysicalFragment3.class, null); mTabsAdapter.addTab( bar.newTab().setText("CAGE"), HistoryPhysicalFragment4.class, null); mTabsAdapter.addTab( bar.newTab().setText("SIGECAPS"), HistoryPhysicalFragment5.class, null); mTabsAdapter.addTab( bar.newTab().setText("Glasgow"), HistoryPhysicalFragment6.class, null); mTabsAdapter.addTab( bar.newTab().setText("Neuro"), HistoryPhysicalFragment7.class, null); mTabsAdapter.addTab( bar.newTab().setText("Dermat"), HistoryPhysicalFragment8.class, null); mTabsAdapter.addTab( bar.newTab().setText("Minicog"), HistoryPhysicalFragment9.class, null); } 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<TabInfo> mTabs = new ArrayList<TabInfo>(); static final class TabInfo { private final Class<?> clss; private final Bundle args; TabInfo(Class<?> _class, Bundle _args) { clss = _class; args = _args; } } public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { super(activity.getSupportFragmentManager()); mContext = activity; mActionBar = activity.getSupportActionBar(); 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(); } @Override public int getCount() { return mTabs.size(); } @Override 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) { } } // END Tabs View Pager } 

Solutions Collecting From Web of "GetSupportFragmentManager () не определен"

Вы избавитесь от этой проблемы, сделав операцию, которая вызывает диалог, расширяя FragmentActivity

 public class ObstetricsFragment1 extends FragmentActivity{ 

Это присуще библиотеке поддержки, как видно из СПЕКТОВ DIALOG и СПИСОК БИБЛИОТЕЧНЫХ ПОДДЕРЖКИ

Попробуйте изменить свой код на это:

 public class ObstetricsFragment1 extends SherlockFragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Fragment Layout View view = inflater.inflate(R.layout.obstetricsfragment1, container, false); Button mPickLMPDate = (Button) view.findViewById(R.id.pickLMPDate); mPickLMPDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); FragmentManager fm = ObstetricsFragment1.this.getSherlockActivity().getSupportFragmentManager(); d.show(fm, "dialog"); } }); return view; } 

Я сделал разницу в ответе Марко, чтобы посмотреть, что он на самом деле рекомендовал изменить: просто

 d.show(getSupportFragmentManager(), "dialog"); 

в

 FragmentManager fm = ObstetricsFragment1.this.getSherlockActivity().getSupportFragmentManager(); d.show(fm, "dialog"); 

Если кто-то использует SherlockActivity вместо SherlockFragment просто увеличивайте активность до SherlockFragmentActivity .

У меня была аналогичная проблема загрузки проекта урока ( https://developer.android.com/training/multiple-threads ).

Чтобы решить проблему, мне пришлось добавить внешний баннер (sdk / extras / android / support / v4 / android-support-v4.jar).

Надеюсь это поможет.

Вам необходимо расширить ObstetricsFragment1 от SherlockDialogFragment.

Чтобы получить FragmentManager в фрагменте вызова getChildFragmentManager() . Смотрите это.

Изменить это

 mPickLMPDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); d.show(getSupportFragmentManager(), "dialog"); } }); 

в

 mPickLMPDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); d.show(getChildFragmentManager(), "dialog"); } }); 

В вашем проекте есть проблема, потому что вы используете actionBarSherlock, который устарел … Вы должны взглянуть на поддержку Android и использовать его, потому что с ним доступен supportFragmentManager. Его довольно легко использовать, добавьте его в свой build.gradle

 compile "com.android.support:support-core-utils:25.2.0" 

После того, как вы продлеваете свою деятельность и фрагментируете с помощью функции FragmentActivity или Fragment. Возможно, вам придется внести некоторые изменения из-за использования sherlock bar

Другое дело о вашей проблеме в том, что вы вызвали поддержкуFragmentManager из фрагмента … вы должны вызвать

 getChildFragmentManager() // because it will be a nested fragment 

Надеюсь, это полезно