Saya menggunakan ViewPager kompatibilitas v4 di Android. FragmentActivity saya memiliki banyak data yang akan ditampilkan dengan cara berbeda pada halaman berbeda di ViewPager saya. Sejauh ini saya hanya memiliki 3 instance dari ListFragment yang sama, tetapi di masa depan saya akan memiliki 3 instance ListFragments yang berbeda. ViewPager berada di layar ponsel vertikal, daftar tidak berdampingan.
Sekarang tombol pada ListFragment memulai aktivitas satu halaman terpisah (melalui FragmentActivity), yang mengembalikan dan FragmentActivity memodifikasi data, menyimpannya, lalu mencoba memperbarui semua tampilan dalam ViewPager-nya. Di sinilah saya terjebak.
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;
}
...
Sekarang seperti yang Anda lihat, upaya pertama saya adalah memberi tahuDataSetChanged pada seluruh FragmentPagerAdapter, dan ini menunjukkan untuk memperbarui data kadang-kadang, tetapi orang lain saya mendapat IllegalStateException: Tidak dapat melakukan tindakan ini setelah onSaveInstanceState.
Upaya kedua saya melibatkan mencoba untuk memanggil fungsi pembaruan di ListFragment saya, tetapi getId di getItem kembali 0. Sesuai dokumen yang saya coba dengan
memperoleh referensi ke Fragmen dari FragmentManager, menggunakan findFragmentById () atau findFragmentByTag ()
tapi saya tidak tahu tag atau id dari Fragmen saya! Saya memiliki android: id = "@ + id / viewpager" untuk ViewPager, dan android: id = "@ android: id / list" untuk ListView saya di tata letak ListFragment, tapi saya rasa ini tidak berguna.
Jadi, bagaimana saya bisa: a) memperbarui seluruh ViewPager dengan aman dalam sekali jalan (idealnya mengembalikan pengguna ke halaman sebelumnya) - tidak apa-apa jika pengguna melihat perubahan tampilan. Atau lebih disukai, b) memanggil fungsi di setiap ListFragment yang terpengaruh untuk memperbarui ListView secara manual.
Bantuan apa pun akan diterima dengan penuh syukur!
null
fragmen.