Androidでv4互換のViewPagerを使用しています。私のFragmentActivityには、ViewPagerのさまざまなページにさまざまな方法で表示される一連のデータがあります。これまでのところ、同じListFragmentのインスタンスは3つしかありませんが、将来的には、異なるListFragmentのインスタンスが3つになる予定です。ViewPagerは垂直の電話画面上にあり、リストは並んでいません。
これで、ListFragmentのボタンが(FragmentActivityを介して)個別のフルページアクティビティを開始し、FragmentActivityがデータを変更して保存し、ViewPagerのすべてのビューを更新しようとします。私が行き詰まっているのはここです。
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;
}
...
ご覧のとおり、最初の試みはFragmentPagerAdapter全体でnotifyDataSetChangedを実行することでしたが、データが時々更新されることが示されましたが、IllegalStateExceptionを受け取った他のもの:onSaveInstanceStateの後でこのアクションを実行できません。
私の2番目の試みは、ListFragmentで更新関数を呼び出そうと試みましたが、getItemのgetIdは0を返しました。
findFragmentById()またはfindFragmentByTag()を使用して、FragmentManagerからFragmentへの参照を取得する
しかし、フラグメントのタグやIDがわかりません!ViewPager用のandroid:id = "@ + id / viewpager"と、ListFragmentレイアウトのListView用のandroid:id = "@ android:id / list"がありますが、これらは有用ではないと思います。
それで、私は次のいずれかを行うことができます:a)ViewPager全体を一度に安全に更新します(理想的にはユーザーを以前のページに戻します)-ユーザーがビューの変更を確認しても問題ありません。または、b)影響を受ける各ListFragmentで関数を呼び出して、手動でListViewを更新することもできます。
どんな助けも感謝して受け入れられます!
null
フラグメントを取得します。