GetSupportFragmentManager () - undefined

I get the following error: "The getSupportFragmentManager () method is undefined for the type new View.OnClickListener () {}" in my fragment file shown below.

I have a compatibility library referenced by ABS, and the correct import. I reinstalled the ABS library with the compatibility library, cleared the project, restarted Eclipse, but nothing worked.

Essentially, I'm trying to get a snippet to show a date picker using a snippet dialog. After a date is selected, it must be returned to the fragment so that it can be used to calculate information based on that date.

Here is the code for my snippet:

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

Here's the code for the dialog fragment:

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

Finally, here is the code for my activity:

 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 } 
+53
android actionbarsherlock android-fragments android-dialogfragment
Nov 03 '12 at 18:50
source share
8 answers

you will get rid of this problem by doing an operation that causes a dialog, expanding FragmentActivity

 public class ObstetricsFragment1 extends FragmentActivity{ 

this is inherent in the support library, as shown in DIALOG SPECS and LIBRARY SUPPORT LIST

+82
Jan 18 '13 at 17:01
source share

Try changing your code to this:

 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; } 
+9
Nov 06
source share

I made a difference in Marco's answer to see what he really recommended changing: just

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

to

 FragmentManager fm = ObstetricsFragment1.this.getSherlockActivity().getSupportFragmentManager(); d.show(fm, "dialog"); 
+4
May 04 '13 at 6:26
source share

If someone uses SherlockActivity instead of SherlockFragment , just increase the activity to SherlockFragmentActivity .

+3
Apr 10 '14 at 1:07
source share

I had a similar problem downloading the lesson project ( https://developer.android.com/training/multiple-threads ).

To solve the problem, I had to add an external banner (sdk / extras / android / support / v4 / android-support-v4.jar).

Hope this helps.

+2
Oct. 11 '13 at 18:19
source share

You need to extend ObstetricsFragment1 from SherlockDialogFragment.

+1
May 15 '13 at 22:05
source share

Get the FragmentManager in a call to the getChildFragmentManager() fragment. See this.

Change it

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

to

 mPickLMPDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { LMPDatePickerDialogFragment d = LMPDatePickerDialogFragment.newInstance(); d.show(getChildFragmentManager(), "dialog"); } }); 
0
03 Mar. '17 at 8:13
source share

Your project has a problem because you are using actionBarSherlock, which is deprecated ... You should take a look at Android Support and use it, because supportFragmentManager is available with it. It is quite easy to use, add it to your build.gradle

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

After expanding your activity and fragmentation using the FragmentActivity or Fragment function. You may need to make some changes due to the use of sherlock bar

Another thing about your problem is that you called FragmentManager support from a fragment ... you should call

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

Hope this is helpful

-one
Mar 07 '17 at 10:44 on
source share



All Articles