Me estoy haciendo un IllegalStateException dentro de esta actividad, pero no muy seguro de lo que está pasando. Aquí está el ViewPagerAdapter clase 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 de bloqueo:

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.
llame notifyDataSetChanged() en el adaptador, cada vez que el tamaño de los cambios de datos.
donde debo usar el notifyDataSetChanged() método ?

OriginalEl autor thisiscrazy4 | 2013-07-16

3 Comentarios

  1. 14

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

    Si sigues leer el mensaje, dice que espere 0 elementos y obtener 1. Con esto, parece que establece el adaptador antes de conjunto de todos los elementos/páginas que el adaptador de recibir.

    donde debemos usar notifyDataSetChanged() método?
    Cuando el tamaño de los datos ha cambiado. La primera vez que NO debe llamar de curso.
    puedes ver este post : stackoverflow.com/questions/17784476/…
    después de cambiar el adaptador de elementos que se pueden llamar «notifyDataSetChanged()»

    OriginalEl autor Aracem

  2. 1

    Tengo problemas similares como lo hizo, tengo viewpager en Actividad, a continuación, cuando el usuario hace clic en el elemento en el viewpager, irá a la Actividad de la B que han viewpager. Después de que el usuario de la espalda de la Actividad de la B a la Actividad, lanzando una 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 de la viewpager siempre 0 debido a que el adaptador no tiene los datos que pasan a través de la Actividad. Así que lo intenté de trabajo como en este ejemplo:

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

    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 el fragmento de la clase:
    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 no se muestra ya, y el viewpager funciona normalmente. Este método tratando de hacer el viewpager como listview hizo, porque listview se han de pasar los datos a través del adaptador para el adaptador de no perder el contenido de los datos, incluso los datos han cambiado. Espero que este ejemplo ayuda a sus problemas. Saludos.

    Simplificar esta respuesta por favor, para una mejor legibilidad

    OriginalEl autor Aprido Sandyasa

  3. -1

    A mi me pasó cuando traté de reemplazar getCount() de la página adaptador de

    Durante autorización, voy a mostrar sólo una página. Después de la terminación de la autorización puedo cambiar la página de contar hasta 3. Se cae para mí si yo no lo 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

    OriginalEl autor МоеИмя Неизвестно

Dejar respuesta

Please enter your comment!
Please enter your name here