I'm updating my Fragment number 2 using:

@Override
public int getItemPosition(Object object) {
    FragmentPage2 f = (FragmentPage2) object;
    if (f != null) {
        f.update();
    }
    return super.getItemPosition(object);
}

Now, when I add and additional and different Fragment in getItem(int position), everything seems to be working fine. However, when I run mPager.getAdapter().notifyDataSetChanged(); it throws me:

08-07 19:45:50.844: E/AndroidRuntime(17776): java.lang.ClassCastException: com.foodbuilder.FragmentPage1 cannot be cast to com.foodbuilder.FragmentPage2
08-07 19:45:50.844: E/AndroidRuntime(17776):    at com.foodbuilder.MainActivity$MyAdapter.getItemPosition(MainActivity.java:967)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:851)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2772)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at com.foodbuilder.MainActivity.onDialogPositiveClick(MainActivity.java:888)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at com.foodbuilder.TablesDialogFragment$2.onClick(TablesDialogFragment.java:57)
08-07 19:45:50.844: E/AndroidRuntime(17776):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
` 

What is happening? Thank you very much.

有帮助吗?

解决方案

@Override
public int getItemPosition(Object object) {
    if(object != null && object instanceof FragmentPage2){
        FragmentPage2 f = (FragmentPage2) object;
        f.update();        
    }
    return super.getItemPosition(object);
}

Similarly you can get object class and check if it is assignable from FragmentPage2.class:

if(object.getClass().isAssignalbeFrom(FragmentPage2.class))

This happens because you have different classes that inherit Fragment and getItemPosition() does not care about the type of the object, but the casting you do does care about the type of the object.

Hope it helps.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top