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