0

I am implementing Actionbar with swipe feature on tabs first time. I am running on honeycomb OS (Api level 11). Hence i have to use support compatibility library v13 to use view pager and other components used to build swipe mechanism like FragmentPagerAdapter.

I am using tutorial on developer.android to build this. Here is the link.

However i am getting a strange issue of no such method found like attach and detach.

Let me post the full track trace

09-04 13:07:42.560: E/AndroidRuntime(774): java.lang.NoSuchMethodError: android.app.FragmentTransaction.attach
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.support.v13.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1016)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.support.v4.view.ViewPager$3.run(ViewPager.java:244)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.os.Handler.handleCallback(Handler.java:587)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.os.Looper.loop(Looper.java:126)
09-04 13:07:42.560: E/AndroidRuntime(774):  at android.app.ActivityThread.main(ActivityThread.java:3997)
09-04 13:07:42.560: E/AndroidRuntime(774):  at java.lang.reflect.Method.invokeNative(Native Method)
09-04 13:07:42.560: E/AndroidRuntime(774):  at java.lang.reflect.Method.invoke(Method.java:491)
09-04 13:07:42.560: E/AndroidRuntime(774):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
09-04 13:07:42.560: E/AndroidRuntime(774):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
09-04 13:07:42.560: E/AndroidRuntime(774):  at dalvik.system.NativeStart.main(Native Method)

I have also gone through same link that represent same issue but it didnt solve my problem. this is the link to same issue

I am not using ActionbarSherloc as i am running on Api level 11.

I am posting my Adapter class and TabListener in case you want to give a look.

public class MyPagerAdapter extends FragmentPagerAdapter{

        Fragment mFragment;
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
            // TODO Auto-generated constructor stub
        }

        @Override
        public android.app.Fragment getItem(int position) {
            // TODO Auto-generated method stub
            switch (position) {
            case 0:
                mFragment = (PatientForms)new PatientForms();
                return mFragment;
            case 1:
                mFragment = (Vitals)new Vitals();
                return mFragment;
            case 2:
                mFragment = (ChartsActivity)new ChartsActivity();
                return mFragment;
            case 3:
                mFragment = (Note)new Note();
                return mFragment;   
            default:
                return null;
            }
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return 4;
        }

        @Override
        public void destroyItem(ViewGroup container, int position,
                Object object) {
            // TODO Auto-generated method stub
        }

    }

private class MyTabListener implements ActionBar.TabListener
    {
        private Fragment mFragment;
        private final Activity mActivity;
        private final String mFragName;

        public MyTabListener( Activity activity, String fragName )
        {
            mActivity = activity;
            mFragName = fragName;
        }

        @Override
        public void onTabSelected( Tab tab, FragmentTransaction ft )
        {
            Log.i(TAG, "tab position to set is "+tab.getPosition());
            pager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }


        @Override
        public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
            // TODO Auto-generated method stub
//          ft.remove( mFragment );
//          mFragment = null;
        }
    }
Community
  • 1
  • 1
kaushal trivedi
  • 3,405
  • 3
  • 29
  • 47

1 Answers1

0

Try this

public android.support.v4.app.Fragment getItem(int position) {
        // TODO Auto-generated method stub
        switch (position) {

        default:
            return null;
        }
    }

UPDATE

check your import statements and replace this lines

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.app.FragmentActivity;

Replace with this

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
Biraj Zalavadia
  • 28,348
  • 10
  • 61
  • 77
  • Hi Biraj,Compatibility of fragment class is not a problem here at compile time it doesn't show me any error. And if you check i am returning native Fragment in getItem method so i couldn't convert it to android.support.v4.app. – kaushal trivedi Sep 04 '13 at 08:29
  • As you mentioned that your are using version support 13 jar for fragment support. And running over Android 3.0 . problem is that Your view pager is of this android.support.v4.app. package and Fragment you return in getItem() method is of android.app.Fragment package so it confuse the viewpager. – Biraj Zalavadia Sep 04 '13 at 08:38
  • Yes but then it could give me compile time error.As i am using the support library v13 which allows to convert the native android.app.Fragment class to Fragment class used by android.support.v4.app. I guess so. Are you proposing that attach and detach methods are available for only android.support.v4.Fragment class ? – kaushal trivedi Sep 04 '13 at 08:45