Atualize o ViewPager dinamicamente?

Não consigo atualizar o conteúdo no ViewPager.

Uma pergunta: Qual é o relacionamento e o uso correto dos métodos instantiateItem () e getItem () na classe FragmentPagerAdapter?

Eu estava usando apenas getItem () para instanciar e retornar meus fragmentos:

@Override
public Fragment getItem(int position) {
    return new MyFragment(context, paramters);
}

Isso funcionou bem (mas, como disse, não posso alterar o conteúdo).

Então eu encontrei isto:ViewPager PagerAdapter não atualizando a exibição

Particular em que é falado sobre o método instanciadoItem ():

"Minha abordagem é usar o método setTag () para qualquer visualização instanciada no método instantiateItem ()"

Então agora eu quero implementar o instanciadoItem () para fazer isso. Mas eu não sei o que tenho para retornar lá (return é Object) e qual a relação com getItem (int position)?

Atualmente estou usando getItem para instanciar o fragmento, isso está errado? Mas então eu tenho que colocar os fragmentos na variável de instância, ou não implementar getItem () em tudo ...? Eu simplesmente não entendo isso.

Eu tentei ler oreferência:

public abstract Fragment getItem (posição int)

Retorna o fragmento associado a uma posição especificada.

public ObjectualiateItem (contêiner do ViewGroup, posição int)

Crie a página para a posição dada. O adaptador é responsável por adicionar a visualização ao contêiner fornecido aqui, embora deva garantir que isso seja feito somente no momento em que ele retornar de finishUpdate (ViewGroup). Parâmetros

container A View contendo em que a página será mostrada. position A posição da página a ser instanciada.

Retorna

Retorna um objeto representando a nova página. Isso não precisa ser um modo de exibição, mas pode ser algum outro contêiner da página.

... mas eu ainda não entendo como eles estão relacionados e o que tenho que fazer.

Aqui está meu código. Estou usando o pacote de suporte 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;
    }
}

Aqui também tem alguém com um problema parecido, sem respostas ...

http://www.mail-archive.com/[email protected]/msg200477.html

questionAnswers(19)

yourAnswerToTheQuestion