IllegalStateException con PagerAdapter

Sto ottenendo un illegale stato di esposizione all'interno di questa attività, ma non troppo sicuro di quello che sta succedendo. Ecco la class ViewPagerAdapter in 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(); } } 

Ecco il registro di crash:

  • Gradel android build per diverse architetture di processre
  • La class di applicazione Android viene chiamata due volte
  • Java 7 funzioni linguistiche con Android
  • Sovrapposizione Android MapView scompare quando si ingrandisce
  • ActionBarSherlock dà tonnellate di "chiamata richiede livello API 11 (attuali min è 7)" errori
  • Qual è la differenza tra attività e intenti in Android?
  •  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. 

  • itext pdf generator è una libreria open source per android?
  • La mappa di MapFragment viene caricata con ritardo quando si torna da un'altra attività
  • Come triggersre l'attività in Android con un button di chiusura nell'angolo superiore?
  • Come allineare le viste nella parte inferiore dello schermo?
  • Come posso lanciare l'emulatore Android dalla row di command?
  • Come posso modificare l'orientamento dello schermo nell'emulatore Android?
  • 3 Solutions collect form web for “IllegalStateException con PagerAdapter”

    Il problema è che l'elenco degli articoli / pagine da mostrare nel PageAdapter cambia e non si desidera call pageAdapter.notifyDataSetChanged() .

    Se si continua a leggere il messaggio, dice che attendere 0 elementi e get 1. Con questo, sembra che si imposta la scheda prima di impostare tutti gli elementi / pagine ricevuti dalla scheda.

    Ho problemi simili a quello che hai fatto, ho viewpager sull'attività A, poi quando l'utente ha fatto clic sull'elemento nel viewpager, andrà all'attività B che ha anche viewpager. Dopo che l'utente torna dall'attività B all'attività A, lancerà l'exception come questo:

     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 

    Penso che il problema sia il contenuto dei dati che l'adattatore del viewpager ha sempre 0 poiché la scheda non ha i dati passati da Activity. Così ho provato a funzionare come questo esempio:

    DetailProductActivity.class

     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)); } } 

    E l'adattatore di 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; } } 

    E la class di frammento: 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); } } } } 

    Ora, l'exception prima non verrà più visualizzata e il viewpager funziona normalmente. Questo metodo provava a rendere il viewpager come l'elenco di liste, perché la listview avrà passare i dati attraverso la scheda in modo che la scheda non perderà il contenuto dei dati anche i dati sono cambiati. Spero che questo esempio aiuterà i tuoi problemi. Saluti.

    Mi è capitato quando ho cercato di ignorare getCount () della scheda di pagina

    Durante l'authorization, mostro solo una pagina. Dopo la fine dell'authorization, cambio il numero di pagine a 3. C'è per me se non chiamo InvalidatePageAdapter () una volta

     @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 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.