为什么在我的屏幕旋转出现android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)? [英] why appears android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576) on my screen rotation?

查看:104
本文介绍了为什么在我的屏幕旋转出现android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个问题。我跟随由Andrew鲁菲洛(它工作得很好),使这个机器人教程,它使用<一个HREF =htt​​p://actionbarsherlock.com/相对=nofollow> actionbarsherlock 库,但是当我旋转的应用程序停止屏,而且还当我离开一会儿应用程序停止,应用程序停止,表明了我一个 NullPointerException异常在我的logcat中,所以我试图用另一个版本更改库 V4 ,它仍然给了我同样的错误。

当屏幕旋转,这是所谓的方法呢?结果
它是在一些方法返回一些空值?结果
下面是本教程code

  @覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);
    mViewPager =新ViewPager(本);
    mViewPager.setId(R.id.pager);
    的setContentView(mViewPager);    动作条酒吧= getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    //bar.setTitle(\"Bolivia经济学刊);    mTabsAdapter =新TabsAdapter(这一点,mViewPager);
    mTabsAdapter.addTab(bar.newTab()的setText(片段1),Fragment_1.class,空);
    mTabsAdapter.addTab(bar.newTab()的setText(片段2),Fragment_2.class,空);
    mTabsAdapter.addTab(bar.newTab()的setText(片段3),Fragment_3.class,空);
    mTabsAdapter.addTab(bar.newTab()的setText(片段4),Fragment_4.class,空);}

它调用另一个类

 公共类TabsAdapter扩展FragmentPagerAdapter实现ActionBar.TabListener,ViewPager.OnPageChangeListener {
私人最终上下文mContext;
私人最终动作条mActionBar;
私人最终ViewPager mViewPager;
私人最终的ArrayList&LT; TabInfo&GT; mTabs =新的ArrayList&LT; TabInfo&GT;();
私人最终字符串标记=21轮询:静态final类TabInfo {
    私人最终级&LT;&GT; CLSS;
    私人最终捆绑ARGS;    TabInfo(类&LT;&GT; _class,捆绑_args){
        CLSS = _class;
        ARGS = _args;
    }
}公共TabsAdapter(SherlockFragmentActivity发,ViewPager寻呼机){
    超级(fa.getSupportFragmentManager());
    的System.out.println(-------------- ENTRO);
    mContext =发;
    mActionBar = fa.getSupportActionBar();
    mViewPager =寻呼机;
    mViewPager.setAdapter(本);
    mViewPager.setOnPageChangeListener(本);
}公共无效addTab(ActionBar.Tab标签,类&LT;&GT; CLSS,捆绑参数){
    TabInfo信息=新TabInfo(CLSS,参数);
    tab.setTag(信息);
    tab.setTabListener(本);
    mTabs.add(信息);
    mActionBar.addTab(标签);
    notifyDataSetChanged();
}@覆盖
公共无效onPageScrollStateChanged(INT状态){    //Log.v(TAG,滚动);
}@覆盖
公共无效onPageScrolled(INT位置,浮positionOffset,诠释positionOffsetPixels){
}@覆盖
公共无效使用onPageSelected(INT位置){
    mActionBar.setSelectedNavigationItem(位置);
    Log.v(TAGactionbarl);
}@覆盖
公共无效onTabSelected(标签选项卡,FragmentTransaction英尺){
    mViewPager.setCurrentItem(tab.getPosition());
    Log.v(TAG,点击);
    对象标记= tab.getTag();
    的for(int i = 0; I&LT; mTab​​s.size();我++){
        如果(mTabs.get(ⅰ)==标签){
            mViewPager.setCurrentItem(ⅰ);
        }
    }}@覆盖
公共无效onTabUnselected(标签选项卡,FragmentTransaction英尺){
    Toast.makeText(mContext,你已经取消一个标签,Toast.LENGTH_SHORT).show();
}@覆盖
公共无效onTabReselected(标签选项卡,FragmentTransaction英尺){}@覆盖
公共片段的getItem(INT位置){
    TabInfo信息= mTab​​s.get(位置);
    返回Fragment.instantiate(mContext,info.clss.getName(),info.args);
}@覆盖
公众诠释的getCount(){
    返回mTabs.size();
}}

这里是logcat的误差

  10月10日至18日:26:53.539:E / AndroidRuntime(19846):致命异常:main``
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):显示java.lang.NullPointerException
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在com.actionbarsherlock.app.SherlockFragmentActivity.onSaveInstanceState(SherlockFragmentActivity.java:126)
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在android.app.Activity.performSaveInstanceState(Activity.java:1113)
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1189)
一十月10日至18日:26:53.539:E / AndroidRuntime(19846):在android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2807)


解决方案

我刚刚有这个问题,那是因为我的Andr​​oid支持,v4.jar已经过时,没有<一个href=\"http://stackoverflow.com/questions/8748064/starting-activity-from-fragment-causes-nullpointerexception\">this错误修复。我通过更新Android的支持 - v4.jar库,按照下面的步骤固定的:


  • 从我的项目中删除我的Andr​​oid支持,v4.jar(libs文件夹下)

  • 从附加功能下的SDK删除了Android的支持库包和重新安装。

  • 然后我创建了一个新的应用程序的项目,所以我能得到​​更新的Andr​​oid支持-v4.jar

  • Coppied从刚刚创建的项目的Andr​​oid的支持 - v4.jar和在我的项目的libs文件夹粘贴它。 (您现在可以删除新创建的项目)

  • 最后,我建立了自己的路径:右键单击刚刚粘贴JAR - >构建路径 - >配置球泡路径...和排序和导出选项卡下我检查Android支持-v4.jar-MyProject的/库和Android的未经检查的依赖。

I have this problem. I follow this android tutorial made by Andrew Rufolo (which worked fine), it uses actionbarsherlock library, but when I rotate the screen the app stops, but also it stops when i leave the app for a while, the application stops and shows me a NullPointerException in my logcat, so I tried to change the library v4 by another version and it still gives me the same error.

Which methods are called when the screen rotates?
Is it returning some empty value in some method?
Here is the tutorial code

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mViewPager = new ViewPager(this);
    mViewPager.setId(R.id.pager);
    setContentView(mViewPager);

    ActionBar bar = getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    //bar.setTitle("Bolivia Economica");

    mTabsAdapter = new TabsAdapter(this, mViewPager);
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 1"), Fragment_1.class, null);
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 2"), Fragment_2.class, null);
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 3"), Fragment_3.class, null);
    mTabsAdapter.addTab(bar.newTab().setText("Fragment 4"), Fragment_4.class, null);

}

it calls to another class

public 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>();
private final String TAG = "21st Polling:";

static final class TabInfo{
    private final Class<?> clss;
    private final Bundle args;

    TabInfo(Class<?> _class, Bundle _args){
        clss = _class;
        args = _args;
    }
}

public TabsAdapter(SherlockFragmentActivity fa, ViewPager pager) {
    super(fa.getSupportFragmentManager());
    System.out.println("--------------entro");
    mContext = fa;
    mActionBar = fa.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 void onPageScrollStateChanged(int state) {

    //Log.v(TAG, "scroll");
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {


}

@Override
public void onPageSelected(int position) {
    mActionBar.setSelectedNavigationItem(position);
    Log.v(TAG, "actionbarl");
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    mViewPager.setCurrentItem(tab.getPosition());
    Log.v(TAG, "clicked");
    Object tag = tab.getTag();
    for (int i = 0; i<mTabs.size(); i++){
        if (mTabs.get(i) == tag){
            mViewPager.setCurrentItem(i);
        }
    }

}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    Toast.makeText(mContext, "You've deselected a tab", Toast.LENGTH_SHORT).show();
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {

}

@Override
public Fragment getItem(int position) {
    TabInfo info = mTabs.get(position);
    return Fragment.instantiate(mContext, info.clss.getName(), info.args);
}

@Override
public int getCount() {
    return mTabs.size();
}

}

here is the logcat error

10-18 10:26:53.539: E/AndroidRuntime(19846): FATAL EXCEPTION: main``
10-18 10:26:53.539: E/AndroidRuntime(19846): java.lang.NullPointerException
10-18 10:26:53.539: E/AndroidRuntime(19846):    at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)
10-18 10:26:53.539: E/AndroidRuntime(19846):    at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1617)
10-18 10:26:53.539: E/AndroidRuntime(19846):    at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:481)
10-18 10:26:53.539: E/AndroidRuntime(19846):    at com.actionbarsherlock.app.SherlockFragmentActivity.onSaveInstanceState(SherlockFragmentActivity.java:126)
10-18 10:26:53.539: E/AndroidRuntime(19846):    at android.app.Activity.performSaveInstanceState(Activity.java:1113)
10-18 10:26:53.539: E/AndroidRuntime(19846):    at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1189)
10-18 10:26:53.539: E/AndroidRuntime(19846):    at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:2807)

解决方案

I've just had this problem and it was because my android-support-v4.jar was outdated and didn't have this bug fixed. I fixed this by updating the android-support-v4.jar library, following the next steps:

  • Deleted my android-support-v4.jar from my project (under libs folder)
  • Deleted the android support library packages from the SDK under Extras and installed it again.
  • then I created a new Application project so I could get the updated android-support-v4.jar
  • Coppied the android-support-v4.jar from the just created project and pasted it in my project's libs folder. (You can now delete the new created project)
  • Lastly, I built its path: right click on the just pasted JAR --> Build Path --> Configure Buld Path... and under the Order and Export tab I checked android-support-v4.jar-MyProject/libs and unchecked Android Dependencies.

这篇关于为什么在我的屏幕旋转出现android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1576)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆