¿Actualizar ViewPager dinámicamente?

No puedo actualizar el contenido en ViewPager.

Una pregunta: ¿Cuál es la relación y 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 (pero como dije no puedo cambiar el contenido).

Así que encontré esto:ViewPager PagerAdapter no actualiza la vista

Particularmente uno en el que se ha hablado del método instantiateItem ():

"Mi enfoque es utilizar el método setTag () para cualquier vista instanciada en el método instantiateItem ()"

Así que ahora quiero implementar instantiateItem () para hacer eso. Pero no sé qué tengo que regresar allí (el retorno es Objeto) y cuál es la relación con getItem (posición int)?

Actualmente estoy usando getItem para crear una instancia del Fragmento, ¿está mal? ¿Pero entonces tengo que poner los fragmentos en la variable de instancia, o no implementar getItem () en absoluto ...? Simplemente no lo entiendo.

Intenté leer elreferencia:

Fragmento abstracto público getItem (posición int)

Devuelve el Fragmento asociado a una posición especificada.

Objeto público instantiateItem (ViewGroup container, int position)

Crea la página para la posición dada. El adaptador es responsable de agregar la vista al contenedor que se proporciona aquí, aunque solo debe asegurarse de que esto se haga antes de que 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 para ser instanciada.

Devoluciones

Devuelve un objeto que representa la nueva página. Esto no necesita ser una Vista, pero puede ser algún otro contenedor de la página.

... pero todavía no entiendo cómo están relacionados y qué tengo que hacer.

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/[email protected]/msg200477.html

Respuestas a la pregunta(19)

Su respuesta a la pregunta