У меня есть Viewpager внутри фрагмента, и это работает хорошо, но все фрагменты внутри пейджера просмотра относятся к одному и тому же классу (WaterStationFragment), который отображает избранное, и этот фрагмент имеет флажок, который проверяется, когда этот фрагмент находится в таблица избранного в базе данных sqldatabase. Теперь, когда я снимаю флажок, я пытаюсь удалить фрагмент из пейджера просмотра, но я продолжаю получать ту же ошибку.
08-12 09:09:29.566 1411-1411/com.nemanjaa.vannstand.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.nemanjaa.vannstand.app, PID: 1411
java.lang.IllegalStateException: Recursive entry to executePendingTransactions
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1450)
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1931)
at android.support.v4.app.Fragment.performDestroy(Fragment.java:1717)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1212)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:652)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1931)
at android.support.v4.app.Fragment.performDestroy(Fragment.java:1717)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1212)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:652)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:478)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:892)
at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2819)
at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
at com.nemanjaa.vannstand.app.fragments.FavoritesFragment$CollectionPagerAdapter.removeWaterStation(FavoritesFragment.java:109)
at com.nemanjaa.vannstand.app.fragments.FavoritesFragment.removePage(FavoritesFragment.java:53)
at com.nemanjaa.vannstand.app.fragments.WaterStationFragment$2.onCheckedChanged(WaterStationFragment.java:77)
at android.widget.CompoundButton.setChecked(CompoundButton.java:127)
at android.widget.CompoundButton.toggle(CompoundButton.java:87)
at android.widget.CompoundButton.performClick(CompoundButton.java:99)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Мои ИзбранныеФрагмент:
public class FavoritesFragment extends Fragment {
ViewPager viewPager;
CollectionPagerAdapter mCollectionPagerAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_favorites, container,false);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
mCollectionPagerAdapter = new CollectionPagerAdapter(getChildFragmentManager(),this);
viewPager = (ViewPager) v.findViewById(R.id.pager);
new setAdapterTask().execute();
return v;
}
private class setAdapterTask extends AsyncTask<Void,Void,Void> {
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
viewPager.setAdapter(mCollectionPagerAdapter);
}
}
public void removePage(WaterStation waterStation){
//viewPager = null;
this.mCollectionPagerAdapter.removeWaterStation(waterStation);
}
public CollectionPagerAdapter getmCollectionPagerAdapter() {
return mCollectionPagerAdapter;
}
public class CollectionPagerAdapter extends FragmentStatePagerAdapter{
DatabaseHandler dbHandler = new DatabaseHandler(getActivity().getBaseContext());
List<WaterStation> inner;
List<Fragment> fragmentsList;
FavoritesFragment fragment;
public CollectionPagerAdapter(FragmentManager fragmentManager, FavoritesFragment fragment){
super(fragmentManager);
inner = dbHandler.getAllFavorites();
this.fragment = fragment;
fragmentsList = new ArrayList<Fragment>();
generateFrags();
}
@Override
public Fragment getItem(int position) {
return fragmentsList.get(position);
}
private void generateFrags(){
for(WaterStation waterStation : inner){
fragmentsList.add(makeFragmentsFor(waterStation));
}
}
private Fragment makeFragmentsFor(WaterStation waterStation){
WaterStationFragment waterStationFragment = new WaterStationFragment();
Bundle args = new Bundle();
args.putSerializable("waterStation",waterStation);
waterStationFragment.setArguments(args);
waterStationFragment.setFragment(fragment);
return waterStationFragment;
}
@Override
public int getCount() {
return inner.size();
}
@Override
public int getItemPosition (Object object)
{
return POSITION_NONE;
}
public void removeWaterStation(WaterStation ws){
int i = inner.indexOf(ws);
inner.remove(ws);
fragmentsList.remove(i);
notifyDataSetChanged();
dbHandler.removeFavorite(ws);
}
public void addWaterStation(WaterStation ws){
inner.add(ws);
notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
FragmentManager manager = ((Fragment)object).getChildFragmentManager();
android.support.v4.app.FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment)object);
trans.commit();
Log.v("DESTROYED","DEEEEEEESTROOOOOOOY");
}
}
}
Я перепробовал все, что мог найти по этой теме