【问题标题】:java.lang.NoSuchMethodError: android.app.FragmentTransaction.attach compatibility library v13 issuejava.lang.NoSuchMethodError: android.app.FragmentTransaction.attach 兼容性库 v13 问题
【发布时间】:2013-09-04 07:58:47
【问题描述】:

我第一次在标签上实现带有滑动功能的操作栏。 我在蜂窝操作系统(Api 级别 11)上运行。 因此我必须使用支持兼容性库 v13 来使用视图寻呼机和其他用于构建滑动机制的组件,如 FragmentPagerAdapter。

我正在使用 developer.android 上的教程来构建它。 Here is the link.

但是我遇到了一个奇怪的问题,即找不到像附加和分离这样的方法。

让我发布完整的跟踪记录

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)

我也浏览了代表相同问题的相同链接,但它没有解决我的问题。 this is the link to same issue

我没有使用 ActionbarSherloc,因为我在 Api 级别 11 上运行。

我发布了我的 Adapter 类和 TabListener 以防你想看看。

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

【问题讨论】:

    标签: android android-actionbar android-viewpager android-support-library android-actionbar-compat


    【解决方案1】:

    试试这个

    public android.support.v4.app.Fragment getItem(int position) {
            // TODO Auto-generated method stub
            switch (position) {
    
            default:
                return null;
            }
        }
    

    更新

    检查您的导入语句并替换此行

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

    用这个替换

    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,片段类的兼容性在编译时不是问题,它不会显示任何错误。如果你检查我在 getItem 方法中返回本机片段,所以我无法将其转换为 android.support.v4.app。
    • 正如您提到的,您正在使用版本支持 13 jar 来支持片段。并运行在 Android 3.0 上。问题是您的视图寻呼机属于这个 android.support.v4.app。您在 getItem() 方法中返回的包和 Fragment 属于 android.app.Fragment 包,因此会混淆 viewpager。
    • 是的,但它可能会给我编译时错误。因为我正在使用支持库 v13,它允许将本机 android.app.Fragment 类转换为 android.support.v4 使用的 Fragment 类。应用程序。大概吧。您是否建议仅对 android.support.v4.Fragment 类提供附加和分离方法?
    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 2016-10-19
    • 2012-04-13
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多