Android'de vP uyumluluğu ViewPager kullanıyorum. My FragmentActivity, ViewPager'imdeki farklı sayfalarda farklı şekillerde görüntülenecek bir grup veri içeriyor. Şimdiye kadar aynı ListFragment'ın 3 örneğine sahibim, ancak gelecekte 3 farklı ListFragment örneğine sahip olacağım. ViewPager dikey bir telefon ekranında, listeler yan yana değil.
Şimdi ListFragment üzerindeki bir düğme, tam bir tam sayfa etkinliği başlatır (FragmentActivity aracılığıyla), döndürür ve FragmentActivity verileri değiştirir, kaydeder, sonra ViewPager içindeki tüm görünümleri güncellemeye çalışır. Burada, sıkışıp kaldım.
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;
}
...
Gördüğünüz gibi, ilk denemem tüm FragmentPagerAdapter üzerinde DataSetChanged bildirmek oldu ve bu bazen verileri güncellemek için gösterdi, ancak diğerleri bir IllegalStateException var: onSaveInstanceState sonra bu eylem gerçekleştirilemez.
İkinci denemem, ListFragment öğemde bir güncelleme işlevini çağırmaya çalışmaktı, ancak getItem'deki getId 0 döndürdü. Denediğim belgelere göre
findFragmentById () veya findFragmentByTag () kullanarak FragmentManager'dan Fragment'a başvuru alma
ama Parçalarımın etiketini veya kimliğini bilmiyorum! ViewPager için bir android: id = "@ + id / viewpager" ve ListFragment düzeninde benim ListView için bir android: id = "@ android: id / list" var, ancak bunların yararlı olduğunu düşünmüyorum.
Peki, nasıl olabilir: a) tüm ViewPager'i tek seferde güvenli bir şekilde güncelleyin (ideal olarak kullanıcıyı daha önce bulunduğu sayfaya geri döndürme) - kullanıcının görünüm değişikliğini görmesi tamamdır. Veya tercihen, b) ListView'i manuel olarak güncellemek için etkilenen her ListFragment'teki bir işlevi çağırın.
Herhangi bir yardım minnetle kabul edilir!
null
parçalara ayrılıyorum.