0

logCat に「アクティビティを一時停止できません」というエラーが表示されます。コンテンツがフラグメントである 3 ページの ViewPager があります。NullPointerException レポートがあります。問題は MainActivity コードにあるようです。私の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

}
}

エラー ログ: http://dl.dropbox.com/u/33331786/Errors/log.txt

4

2 に答える 2

0

あなたの問題は FragmentManager::saveFragmentBasicState のバグに関連しています。バグ (および下部の回避策) は、こちらの問題レポートで報告されています。

于 2012-01-29T22:11:42.903 に答える
0

この答えが役立つと思います:

https://stackoverflow.com/a/9446326/1205281

それは同様の問題で私を助けました。この「修正」/「パッチ」をすべてのフラグメントに必ず含めてください (含まれているアクティビティだけでなく)。

幸運を!

于 2012-03-19T14:53:33.897 に答える