2012-09-12 17 views
8

Tengo un visor que usa el siguiente adaptador y, una vez cargado, la primera vista aparece vacía pero no lo está. Si me desplazo a la vista siguiente y luego retrocedo, puedo ver el contenido.¿Por qué la primera vista en ViewPager aparece vacía?

import android.content.Context; 
import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class MyPagerAdapter extends PagerAdapter { 

    Context context; 

    public ArrayList<TextView> mViews; 

    int layoutResourceId; 

    public MyPagerAdapter(Context context) { 
     mViews = new ArrayList<TextView>(); 

    } 

    @Override 
    public void destroyItem(View view, int arg1, Object object) { 
     ((ViewPager)view).removeView((View)object); 
    } 

    @Override 
    public void finishUpdate(View arg0) { 

    } 

    @Override 
    public int getCount() { 
     return mViews.size(); 
    } 

    @Override 
    public Object instantiateItem(View view, int position) { 
     View myView = mViews.get(position); 
     ((ViewPager)view).addView(myView); 
     return myView; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1) { 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

    @Override 
    public void startUpdate(View arg0) { 

    } 

    @Override 
    public int getItemPosition(Object object) { 
     return POSITION_NONE; 
    } 

} 

Y aquí es el código que implementa la actividad de mi ...

public void resetPages() { 
    if (mPageText == null) 
     return; 
    mPagerAdapter.mViews.clear(); 
    for (int i = 0; i < mPageText.size(); i++) { 
     TextView tv = new TextView(this); 
     tv.setTextSize(mSelectedFontSize); 
     tv.setText(mPageText.get(i)); 
     tv.setId(i); 
     tv.setTag(i); 
     tv.invalidate(); 
     mPagerAdapter.mViews.add(tv); 
    } 

mPagerAdapter.notifyDataSetChanged(); 
mViewPager.refreshDrawableState(); 
} 
+0

¿qué es 'mResizeTextView'? –

+0

mResizeTextView es una vista de texto personalizada que se usa para calcular la cantidad de texto que cabe en el espacio. Tengo una cadena larga que necesito mostrar en varias páginas. Actualmente solo está visible para depurar los objetivos. – Josh

+0

He eliminado la línea mResizeTextView del código anterior. No es necesario cambiar su visibilidad para desaparecer ... Sigue teniendo el mismo problema. – Josh

Respuesta

0

intentado añadir followind onCreate método y mi código de obras ("TEXT 0" se apareció en el lanzamiento). tal vez es solo porque el resetPages() se invoca en el momento

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mPageText = new LinkedList<CharSequence>(); 
    for (int i=0; i<10; i++) { 
     mPageText.add("TEXT "+i); 
    } 
    this.mPagerAdapter = new MyPagerAdapter(this); 
    this.mViewPager = (ViewPager)this.findViewById(R.id.viewpager); 
    this.mViewPager.setAdapter(mPagerAdapter); 
    resetPages(); 
} 
0

no estoy seguro de esto pero si se utiliza ViewGroup para su vista en instantiateItem entonces podría trabajar yo solía ViewGroup y su funcionamiento muy bien.

@Override 
public Object instantiateItem(View view, int position) { 
    View myView = mViews.get(position); 
    ((ViewPager)view).addView(myView); 
    return myView; 
} 

esperan mi respuesta ayuda ..

0

La cuestión debe ser porque la vista es tomarse el tiempo para cargar el contenido y la vista no se actualiza después de que el contenido se loaded.Try añadiendo

handler.postDelayed(r=new Runnable() 
     { 
      @Override 
      public void run() { 
       if (mPosition == position) 
       { 

        notifyDataSetChanged(); 
        handler.removeCallbacks(r); 


       } 
      } 
     }, 1000); 

interior instantiateItem del adaptador para que la vista se actualice después de 1 segundo cuando se está creando. mPosition es la posición de la primera vista que se está abriendo. Si está abriendo viewpager haciendo clic en el elemento en la lista, debe pasar la posición del elemento que se está seleccionando al llamar al adaptador. De lo contrario, puede establecer mPostion como 0 si el primer elemento siempre se abre inicialmente en viewpager

Cuestiones relacionadas