viewpager sectionspageradapter fragments example android android-ui

android - sectionspageradapter - ViewPager con FragmentPagerAdapter no muestra contenido



refresh viewpager android (2)

Estoy tratando de usar el Fragmento, ViewPager & co. de la biblioteca de soporte de Android v4. Los fragmentos parecen desplazarse cuando escucho eventos de cambio de página desde el paginador pero el contenido no es visible. Lo que básicamente tengo es:

Un FragmentActivity:

public class MyActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); FragmentPagerAdapter fpa = new MyPagerAdapter(this, createFragments()); ViewPager vp = (ViewPager) findViewById(R.id.pager); vp.setAdapter(fpa); } private List<Fragment> createFragments() { List<Fragment> list = new ArrayList<Fragment>(); list.add(Fragment.instantiate(this, First.class.getName())); list.add(Fragment.instantiate(this, Second.class.getName())); list.add(Fragment.instantiate(this, Third.class.getName())); return list; } @Override protected void onSaveInstanceState(Bundle outState) { }

Un FragmentPagerAdapter:

public class MyPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragments; public MyPagerAdapter(FragmentActivity activity, List<Fragment> fragments) { super(activity.getSupportFragmentManager()); this.fragments = fragments; } @Override public Fragment getItem(int i) { return fragments.get(i); } @Override public int getCount() { return fragments.size(); } @Override public boolean isViewFromObject(View view, Object o) { return view.equals(o); } }

Y tres fragmentos que se parecen a esto:

public class First extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.first, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } }

Y tienen un diseño como estos:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_height="fill_parent" android:layout_width="fill_parent" android:text="First Fragment" android:id="@+id/firstText"/> </LinearLayout>

Originalmente olvidé agregar el diseño principal, aquí viene:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="fill_parent"/> </LinearLayout>

Apreciaría si alguien me puede decir lo que estoy haciendo mal.


Esto se debe a que ha anulado isViewFromObject en MyPagerAdapter .

FragmentPagerAdapter maneja isViewFromObject , por lo que no debe anularlo.

Al igual que yo, estimo que la mayoría de los visitantes a esta publicación comenzaron con un PagerAdapter básico, luego se dieron cuenta de que necesitaban fragmentos de página y cambiaron su clase base sin darse cuenta de las consecuencias. Desafortunadamente, pero no pude criticar al equipo de Android por esto.


Ya está correcto como lo dijo Ian Newson, simplemente elimine el método anulado de isViewFromObject de su código

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