工具:android studio
/*compileSdkVersion 22 buildToolsVersion "23.0.1"*/ compileSdkVersion 25 buildToolsVersion "25.0.2"
compile 'com.android.support:support-v4:22.2.0' compile 'com.android.support:cardview-v7:23.0.1' compile 'com.android.support:appcompat-v7:22.1.1' */ compile 'com.android.support:support-v4:25.2.0' compile 'com.android.support:appcompat-v7:25.2.0' compile 'com.android.support:cardview-v7:25.2.0'运行报错,通过异常类捕获,发现异常如下:
....Fragment must be a public static class to be properly recreated from instance state.
找了一些资料,发现是升级后的v4包判断有修改,定位到,下面代码中的 TabFragment 类,此类定义在了AboutUsActivity 类中
public class AboutUsActivity extends FragmentActivity { ..... @Override protected void onCreate(Bundle savedInstanceState) { .... } private class TabAdapter extends FragmentPagerAdapter { ... @Override public Fragment getItem(int position) { TabFragment fragment = new TabFragment(position); return fragment; } @Override public int getCount() { return Title.length; } @Override public CharSequence getPageTitle(int position) { return Title[position]; } } @SuppressLint("ValidFragment") private class TabFragment extends Fragment{ private int position; private WebView webView; public TabFragment(int position) { this.position = position; } } }
解决办法,将内部类TabFragment 提取出来,单独定义。。。。。。解决了
旧工程升级编译工具后遇到的坑
本人(菜鸟一枚)在解决以上问题时,学习、借鉴了下面博主的做法,后面会更多的了解此类问题:
http://www.2cto.com/kf/201704/634751.html
http://ask.csdn.net/questions/354752