Estou usando o ViewPager de compatibilidade com a v4 no Android. My FragmentActivity possui um monte de dados que devem ser exibidos de maneiras diferentes em páginas diferentes no meu ViewPager. Até agora, tenho apenas 3 instâncias do mesmo ListFragment, mas no futuro terei 3 instâncias de ListFragments diferentes. O ViewPager está em uma tela vertical do telefone, as listas não estão lado a lado.
Agora, um botão no ListFragment inicia uma atividade de página inteira separada (via FragmentActivity), que retorna e FragmentActivity modifica os dados, salva-os e tenta atualizar todas as visualizações no ViewPager. É aqui, onde estou preso.
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public String getTitle(int position){
return titles[position];
}
@Override
public int getCount(){
return titles.length;
}
@Override
public Fragment getItem(int position)
{
Fragment frag = HomeListFragment.newInstance(position);
//Attempt 2:
//fragId[position] = frag.getId();
return frag;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //To make notifyDataSetChanged() do something
}
}
public class HomeListFragment extends ListFragment
{
...
public static HomeListFragment newInstance(int num)
{
HomeListFragment f = new HomeListFragment();
...
return f;
}
...
Agora, como você pode ver, minha primeira tentativa foi notificar DataSetChanged em todo o FragmentPagerAdapter, e isso mostrou atualizar os dados algumas vezes, mas em outras eu recebi uma IllegalStateException: Não é possível executar esta ação após onSaveInstanceState.
Minha segunda tentativa envolveu tentar chamar uma função de atualização em meu ListFragment, mas getId em getItem retornou 0. Conforme os documentos que eu tentei
adquirindo uma referência ao Fragmento de FragmentManager, usando findFragmentById () ou findFragmentByTag ()
mas não sei a etiqueta ou o id dos meus fragmentos! Eu tenho um andróide: id = "@ + id / viewpager" para o ViewPager e um andróide: id = "@ android: id / list" para o meu ListView no layout ListFragment, mas não acho que sejam úteis.
Portanto, como posso: a) atualizar o ViewPager inteiro com segurança de uma só vez (o ideal é retornar o usuário à página em que ele estava antes) - tudo bem que o usuário veja a exibição mudar. Ou, de preferência, b) chame uma função em cada ListFragment afetado para atualizar o ListView manualmente.
Qualquer ajuda seria aceita com gratidão!
null
por fragmento.