Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序在屏幕锁定时崩溃_Android_Android Activity_Tabs_Android Fragments_Forceclose - Fatal编程技术网

Android 应用程序在屏幕锁定时崩溃

Android 应用程序在屏幕锁定时崩溃,android,android-activity,tabs,android-fragments,forceclose,Android,Android Activity,Tabs,Android Fragments,Forceclose,我收到一个错误,无法在logCat中暂停活动。我有一个ViewPager,有3页,内容都是片段。有一个NullPointerException报告。问题似乎在MainActivity代码中。 以下是我的主要活动: public class MainActivity extends FragmentActivity implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { private TabHost mT

我收到一个错误,无法在logCat中暂停活动。我有一个ViewPager,有3页,内容都是片段。有一个NullPointerException报告。问题似乎在MainActivity代码中。 以下是我的主要活动:

public class MainActivity extends FragmentActivity implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {

private TabHost mTabHost;
private ViewPager mViewPager;
private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, MainActivity.TabInfo>();
private PagerAdapter mPagerAdapter;

private class TabInfo {
     private String tag;
     private Class<?> clss;
     private Bundle args;
     private Fragment fragment;
     TabInfo(String tag, Class<?> clazz, Bundle args) {
         this.tag = tag;
         this.clss = clazz;
         this.args = args;
     }
}
class TabFactory implements TabContentFactory {

    private final Context mContext;

    public TabFactory(Context context) {
        mContext = context;
    }
    public View createTabContent(String tag) {
        View v = new View(mContext);
        v.setMinimumWidth(0);
        v.setMinimumHeight(0);
        return v;
    }

}
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    this.initialiseTabHost(savedInstanceState);
    if (savedInstanceState != null) {
        mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
    }
    this.intialiseViewPager();
}
protected void onSaveInstanceState(Bundle outState) {
    outState.putString("tab", mTabHost.getCurrentTabTag());
    super.onSaveInstanceState(outState);
}
private void intialiseViewPager() {

    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, Tab1Fragment.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab2Fragment.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab3Fragment.class.getName()));
    this.mPagerAdapter  = new PagerAdapter(super.getSupportFragmentManager(), fragments);

    this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
    this.mViewPager.setAdapter(this.mPagerAdapter);
    this.mViewPager.setOnPageChangeListener(this);
}
private void initialiseTabHost(Bundle args) {
    mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();
    TabInfo tabInfo = null;
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("easy").setIndicator(createTabView(this, "EASY")), ( tabInfo = new TabInfo("easy", Tab1Fragment.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("medium").setIndicator(createTabView(this, "MEDIUM")), ( tabInfo = new TabInfo("medium", Tab2Fragment.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);
    MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("intense").setIndicator(createTabView(this, "INTENSE")), ( tabInfo = new TabInfo("intense", Tab3Fragment.class, args)));
    this.mapTabInfo.put(tabInfo.tag, tabInfo);
    mTabHost.setOnTabChangedListener(this);
}
private static View createTabView(final Context context, final String text) {
    View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
    TextView tv = (TextView) view.findViewById(R.id.tabText);
    tv.setText(text);
    return view;
}

private static void AddTab(MainActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {

    tabSpec.setContent(activity.new TabFactory(activity));
    tabHost.addTab(tabSpec);
}

public void onTabChanged(String tag) {

    int pos = this.mTabHost.getCurrentTab();
    this.mViewPager.setCurrentItem(pos);
}

@Override
public void onPageScrolled(int position, float positionOffset,
        int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
    // TODO Auto-generated method stub
    this.mTabHost.setCurrentTab(position);
}

@Override
public void onPageScrollStateChanged(int state) {
    // TODO Auto-generated method stub

}
}
错误日志:

您的问题与FragmentManager::saveFragmentBasicState中的错误有关。底部的错误和解决方法将在问题报告中报告。

我认为这个答案会很有帮助:

它帮助我解决了类似的问题。 请确保将此修复/修补程序包括到所有片段中,而不仅仅包括在包含活动中


祝你好运

您有一个onSaveInstanceState,但是对应的onRestoreInstanceState在哪里?@JoachimIsaksson对不起,我必须在哪里调用onRestoreInstanceState?当您的活动需要保存其状态时,会调用onSaveInstanceState,您正在保存选项卡设置。onRestoreInstanceState在您的活动需要恢复其保存的状态时调用,它应该执行相反的操作,读取选项卡并将其设置为当前选项卡标记。当您的活动保存/还原时,未在onSave中保存/在onRestore中加载的任何内容都可能为空。例如,当您的屏幕被锁定/解锁时,可能会发生这种情况。@JoachimIsaksson我尝试在RestoreInstanceStateBundle上添加public void{如果b!=null{mTabHost.getCurrentTabTag=b.getLongtab;}}}没有任何更改您有stacktrace添加到问题中吗?