我知道这听起来像是FragmentStatePagerAdapter IllegalStateException的副本:<MyFragment>当前不在FragmentManager中, 但他的解决方案与我的情况无关.
我很少遇到以下崩溃:
java.lang.RuntimeException:无法暂停活动{MyActivity}:
...
引起:java.lang.IllegalStateException:片段MyFragment {40648258 id = 0x7f070051}当前不在android.support.v4.app.FragmentStatePagerAdapter的android.support.v4.app.FragmentManagerImpl.putFragment(MT:516)的FragmentManager中.saveState(MT:185)在android.support.v4.view.ViewPager.onSaveInstanceState(MT:881)
...
在Android.app.Activity.onSaveInstanceState(Activity.java:1138)的com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1522)的android.view.View.saveHierarchyState(View.java:6238) )在MyActivity.onSaveInstanceState(MT:336)的android.support.v4.app.FragmentActivity.onSaveInstanceState(MT:480)处
看起来这是我无法理解的奇怪代码FragmentStatePagerAdapter:
for (int i=0; i<mFragments.size(); i++) {
Fragment f = mFragments.get(i);
if (f != null) {
if (state == null) {
state = new Bundle();
}
String key = "f" + i;
mFragmentManager.putFragment(state, key, f);
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来像适配器获取我Fragment的mFragments但不能添加其状态FragmentManager.
我找不到任何方法在我的测试设备上重新创建它,只是从一些用户那里收到了这个.
我正在使用支持包v4.
有帮助吗?谢谢.
java android illegalstateexception android-fragments android-viewpager
我正在使用Android的support.v4软件包来开发包含多个Fragments 的ViewPager .
我试图在用户更改页面时隐藏视图.所以,我实现了一个OnPageChangeListener来监听我的适配器,并update()在Fragment发生页面更改时调用我的方法.但是我得到了一个NullPointerException,我无法弄明白为什么.
这是代码:
public class MyActivity extends FragmentActivity implements
OnPageChangeListener {
private static final int NUM_ITEMS = 2;
private ViewPager mPager;
private static SpaceAdapter mAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new SpaceAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mPager.setOnPageChangeListener(this);
}
public static class SpaceAdapter extends FragmentPagerAdapter {
public SpaceAdapter(FragmentManager fm) {
super(fm);
} …Run Code Online (Sandbox Code Playgroud) java android nullpointerexception android-fragments android-viewpager
我在我的应用程序中实现了一个Loader来查询数据库中的数据.我通过实现LoaderCallbacks<Cursor>监听器来监听发生的变化.我遇到的问题是当onLoaderReset(Loader<Cursor> loader)我的数据发生变化时使用该方法,并且我想要使与加载器相关的任何数据无效并释放.在所有示例中,在此方法中有以下调用:
mAdapter.swapCursor(null);
但问题是我不使用适配器中光标的数据,我在我的应用程序中以其他方式使用它.
(onLoadFinished(Loader<Cursor> loader, Cursor data)例如,直接从返回的游标中)
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data.moveToFirst()) {
TOTAL_CARDS = data.getCount();
mView.createCards(TOTAL_CARDS);
} else {
TOTAL_CARDS = 0;
mView.createCards(TOTAL_CARDS);
}
}
Run Code Online (Sandbox Code Playgroud)
这里要做的相应事情是什么,与...类似mAdapter.swapCursor.我对装载机没有多少经验,事实上我刚开始与他们合作,所以如果有人有解决方案,我会很感激.谢谢!
编辑:现在,我传递null到加载器,它的工作原理如下:
@Override
public void onLoaderReset(Loader<Cursor> loader) {
loader = null;
}
};
Run Code Online (Sandbox Code Playgroud)
但这是正确的解决方案吗?
在我MainActivity,我有:
@Override
protected void onResume() {
super.onResume();
checkForCrashes();
checkForTutorial();
checkForUpdates();
setStore();
setup();
}
Run Code Online (Sandbox Code Playgroud)
在setup(),我打电话initializeTabs()回调:
protected void setup() {
final Store s = getStore();
setBackground();
if (s == null) {
unauthorizedHandler();
return;
}
final Context mainActivity = this;
fragments = getTabFragments();
StoresController.getStoreDetails(s, mainActivity, new Callback<StoreDetailDecorator>() {
@Override
public void success(StoreDetailDecorator storeDetailDecorator, Response response) {
s.prettyName = storeDetailDecorator.store.pretty_name;
s.save();
Log.v(TAG, s.prettyName);
TextView toolbar_label = (TextView)findViewById(R.id.toolbar_label);
toolbar_label.setText(MainActivity.getTruncatedMenuName(s.name()));
SummaryTab t1 = (SummaryTab)fragments.get(0);
t1.notifier = (SummaryTabLoadingNotifier)mainActivity;
initializeTabs(s, fragments);
t1.populateReport(); …Run Code Online (Sandbox Code Playgroud)