IllegalStateException con PagerAdapter

Estoy recibiendo una IllegalStateException dentro de esta actividad, pero no estoy seguro de lo que está pasando. Esta es la clase ViewPagerAdapter en QuickContactActivity.

private class ViewPagerAdapter extends FragmentPagerAdapter { public ViewPagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override public Fragment getItem(int position) { QuickContactListFragment fragment = new QuickContactListFragment(); final String mimeType = mSortedActionMimeTypes.get(position); final List<Action> actions = mActions.get(mimeType); fragment.setActions(actions); return fragment; } @Override public int getCount() { return mSortedActionMimeTypes.size(); } } 

Aquí está el registro del accidente:

 07-15 09:49:21.060: E/com.##.##.##.Application(12378): Thread uncaught exception: 07-15 09:49:21.060: E/com.##.##.##.Application(12378): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 1 Pager id: com.##.##.android:id/item_list_pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.##.contacts.quickcontact.QuickContactActivity$ViewPagerAdapter 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.support.v4.view.ViewPager.populate(ViewPager.java:959) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.support.v4.view.ViewPager.populate(ViewPager.java:911) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer.doFrame(Choreographer.java:532) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.os.Handler.handleCallback(Handler.java:725) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.os.Handler.dispatchMessage(Handler.java:92) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.os.Looper.loop(Looper.java:137) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.app.ActivityThread.main(ActivityThread.java:5041) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at java.lang.reflect.Method.invokeNative(Native Method) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at java.lang.reflect.Method.invoke(Method.java:511) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 07-15 09:49:21.060: E/com.##.##.##.Application(12378): at dalvik.system.NativeStart.main(Native Method) 07-15 09:49:21.060: E/ACRA(12378): ACRA caught a IllegalStateException exception for com.##.##.android. Building report. 

El problema es que su lista de elementos / páginas para mostrar en el cambio PageAdapter y no llamar pageAdapter.notifyDataSetChanged() .

Si sigue leyendo el mensaje, dice que espera por 0 elementos y recibe 1. Con esto, parece que configuró el adaptador antes de configurar todos los elementos / páginas que recibe el adaptador.

Tengo problemas similares como usted, tengo viewpager en la actividad A entonces cuando el usuario chascado el artículo en el viewpager, él irá a la actividad B que tienen viewpager también. Después de que el usuario regrese de la Actividad B a la Actividad A, lanzará Excepción como esta:

 java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 4, found: 0 Pager id: com.gbu.app.templateforbussiness:id/header_view_pager_list Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.gbu.app.templateforbussiness.adapter.DetailProductPagerAdapter 

Creo que el problema es, el contenido de los datos que el adaptador del viewpager tiene siempre 0 porque el adaptador no tiene los datos que pasaron a través de la actividad. Así que lo intenté trabajar como este ejemplo:

DetalleProductoActividad.clase

 public class DetailProductActivity extends FragmentActivity { private ViewPager product_detail_viewpager; private DetailProductPagerAdapter detail_product_adapter; private Intent product_detail_intent; public static List<Product> detail_product; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail_product); product_detail_viewpager = (ViewPager) findViewById(R.id.detail_product_viewpager); detail_product = HomeActivity.home_product; } @Override protected void onStart() { super.onStart(); product_detail_intent = getIntent(); startApp(product_detail_intent); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } private void startApp(Intent data) { // TODO Auto-generated method stub // pass the Array, List of data to viewpager adapter like this detail_product_adapter = new DetailProductPagerAdapter(getSupportFragmentManager(), detail_product); product_detail_viewpager.setAdapter(detail_product_adapter); product_detail_viewpager.setCurrentItem(data.getIntExtra("current_item", 0)); } } 

Y el adaptador de viewpager: DetailProductPagerAdapter.class

 public class DetailProductPagerAdapter extends FragmentPagerAdapter { private ProductDetailFragment detail_product_fragment; private Bundle data; private List<Product> detail_product; // the data from Activity passed to this adapter public DetailProductPagerAdapter(FragmentManager fm, List<Product> p) { super(fm); // TODO Auto-generated constructor stub detail_product = p; } // then passing the data again to your fragment class, like this example @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub detail_product_fragment = new ProductDetailFragment(detail_product); data = new Bundle(); data.putInt("current_item", arg0); detail_product_fragment.setArguments(data); return detail_product_fragment; } @Override public int getCount() { // TODO Auto-generated method stub return detail_product.size(); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } } 

Y la clase de fragmento: ProductDetailFragment.class

 @SuppressLint("ValidFragment") public class ProductDetailFragment extends Fragment { private RelativeLayout detail_item_header; private ImageView detail_item_imv; private TextView detail_item_tv_title; private WebView detail_item_web_content; private DisplayMetrics detail_metrics; private List<Product> detail_product; private int index_item; // the data from adapter pass it to this fragment public ProductDetailFragment(List<Product> p) { detail_product = p; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View view_detail = inflater.inflate(R.layout.item_product_detail_viewpager, container, false); detail_metrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(detail_metrics); savedInstanceState = getArguments(); index_item = savedInstanceState.getInt("current_item"); detail_item_header = (RelativeLayout) view_detail.findViewById(R.id.item_header_product_viewpager); detail_item_imv = (ImageView) detail_item_header.findViewById(R.id.item_imv_product_viewpager); detail_item_tv_title = (TextView) detail_item_header.findViewById(R.id.item_tv_title_product_viewpager); detail_item_web_content = (WebView) view_detail.findViewById(R.id.item_web_product_viewpager); startApp(); return view_detail; } private void startApp() { // TODO Auto-generated method stub detail_item_header.getLayoutParams().height = (int) (detail_metrics.heightPixels * 0.38); if (detail_product.get(index_item).getStatus() == 0) { new loadImageProduct(detail_item_imv).execute(detail_product.get(index_item).getImage()); }else { detail_item_imv.setImageBitmap(detail_product.get(index_item).getBmp()); } detail_item_tv_title.setText(detail_product.get(index_item).getTitle()); String web_content_product = "<!DOCTYPE html>"+ "<html>"+ "<body>"+ "<p>Harga : "+detail_product.get(index_item).getPrice()+"</p><br>"+ detail_product.get(index_item).getDetail()+"<br><br>"+ detail_product.get(index_item).getDetail2()+ "</body>"+ "</html>"; detail_item_web_content.loadDataWithBaseURL("https://www.google.com", web_content_product, "text/html", "UTF-8", null); } @Override public void onDestroy() { super.onDestroy(); } private class loadImageProduct extends AsyncTask<String, Integer, Bitmap> { private Bitmap b; private ImageView vimv; private GetImage get_image; public loadImageProduct(ImageView v) { vimv = v; } @Override protected void onPreExecute() { super.onPreExecute(); b = null; get_image = new GetImage(); } @Override protected Bitmap doInBackground(String...url) { try { b = get_image.loadImageFromServer(url[0]); if (b != null) return b; } catch(OutOfMemoryError e) { } return b; } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); if (result != null) { detail_product.get(index_item).setBmp(result); detail_product.get(index_item).setStatus(1); vimv.setImageBitmap(result); } } } } 

Ahora, la Excepción antes de que no se muestre más, y el viewpager funciona normalmente. Este método intentando hacer el viewpager como listview hizo, porque listview tendrá pasar los datos a través del adaptador para que el adaptador no perderá el contenido de los datos, incluso los datos han cambiado. Espero que este ejemplo ayude a sus problemas. Aclamaciones.

Sucedió a mí cuando intenté anular getCount () del adaptador de la página

Durante la autorización, muestro sólo una página. Después del final de la autorización cambio el cuenta de la página a 3. Cae para mí si no llamo InvalidatePageAdapter () una vez

 @Override public int getCount() { if (mAuthorization_Status == AUTH_STATUS.AUTH_SUCCESS) { if (!isRefreshed) { isRefreshed = true; this.notifyDataSetChanged(); } return NUM_PAGES; } else { return 1; //return NUM_PAGES; } } // END: getCount 
  • Añadir pestañas a la izquierda con FragmentPagerAdapter
  • Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
  • Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState, FragmentTabHost
  • Intento de volver a abrir un objeto ya cerrado: java.lang.IllegalStateException :?
  • Excepción de estado ilegal al intentar cambiar un marcador en un Api de Google Maps v2 desde un mensaje de Google Cloud Messaging
  • Java.lang.IllegalStateException: Fragmento no adjunto a la actividad
  • java.lang.IllegalStateException: Llamar Ver métodos en otro subproceso que el subproceso de interfaz de usuario
  • IllegalStateException cuando .replace el fragmento al reiniciar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.