No puedo actualizar el contenido en ViewPager.
¿Cuál es el uso correcto de los métodos instantiateItem () y getItem () en la clase FragmentPagerAdapter?
Estaba usando solo getItem () para crear instancias y devolver mis fragmentos:
@Override
public Fragment getItem(int position) {
return new MyFragment(context, paramters);
}
Esto funcionó bien. Excepto que no puedo cambiar el contenido.
Así que encontré esto: ViewPager PagerAdapter no actualiza la Vista
"Mi enfoque es utilizar el método setTag () para cualquier vista instanciada en el método instantiateItem ()"
Ahora quiero implementar instantiateItem () para hacer eso. Pero no sé qué debo devolver (el tipo es Object) y cuál es la relación con getItem (int position).
Leí la referencia :
Fragmento abstracto público getItem (posición int)
Devuelve el Fragmento asociado con una posición especificada.
objeto público instantiateItem (contenedor ViewGroup, posición int)
Crea la página para el puesto dado. El adaptador es responsable de agregar la vista al contenedor que se proporciona aquí, aunque solo debe asegurarse de que esto se haga para cuando regrese de finishUpdate (ViewGroup). Parámetros
contenedor La vista que contiene en la que se mostrará la página. posición La posición de la página que se instanciará.
Devoluciones
Devuelve un objeto que representa la nueva página. Esto no necesita ser una Vista, pero puede ser otro contenedor de la página.
Pero todavía no lo entiendo.
Aquí está mi código. Estoy usando el paquete de soporte v4.
ViewPagerTest
public class ViewPagerTest extends FragmentActivity {
private ViewPager pager;
private MyFragmentAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager1);
pager = (ViewPager)findViewById(R.id.slider);
String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};
adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
pager.setAdapter(adapter);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
reload();
}
});
}
private void reload() {
String[] data = {"changed1", "changed2", "changed3", "changed4", "changed5", "changed6"};
//adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
adapter.setData(data);
adapter.notifyDataSetChanged();
pager.invalidate();
//pager.setCurrentItem(0);
}
}
MyFragmentAdapter
class MyFragmentAdapter extends FragmentPagerAdapter {
private int slideCount;
private Context context;
private String[] data;
public MyFragmentAdapter(FragmentManager fm, int slideCount, Context context, String[] data) {
super(fm);
this.slideCount = slideCount;
this.context = context;
this.data = data;
}
@Override
public Fragment getItem(int position) {
return new MyFragment(data[position], context);
}
@Override
public int getCount() {
return slideCount;
}
public void setData(String[] data) {
this.data = data;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
MyFragment
public final class MyFragment extends Fragment {
private String text;
public MyFragment(String text, Context context) {
this.text = text;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.slide, null);
((TextView)view.findViewById(R.id.text)).setText(text);
return view;
}
}
Aquí también hay alguien con un problema similar, sin respuestas http://www.mail-archive.com/android-developers@googlegroups.com/msg200477.html