我在 Android 中使用的是 v4兼容的 ViewPager。我的片段活动有一大堆数据,这些数据将以不同的方式显示在我的 ViewPager 的不同页面上。到目前为止,我只有3个实例的相同的列表片段,但在未来,我将有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 上通知 DataSetChanged,这表明有时会更新数据,但是其他时候我得到了一个 IllegalStateException: 在 onSaveInstanceState 之后不能执行这个操作。
我的第二次尝试是尝试调用 ListFragment 中的 update 函数,但 getItem 中的 getId 返回0。根据我查过的文件
从 FragmentManager 获取对片段的引用,使用 FindFragmentById ()或 findFragmentByTag ()
但是我不知道我的碎片的标签和 ID!我有一个 android: id = “@+ id/ViewPager”用于 ViewPager,android: id = “@android: id/list”用于 ListFragment 布局中的 ListView,但我不认为这些是有用的。
所以,我怎么能: A)一次性安全地更新整个 ViewPager (理想情况下将用户返回到他之前所在的页面)-用户看到视图变化是可以的。 最好是, B)在每个受影响的 ListFragment 中调用一个函数手动更新 ListView。
任何帮助都会被感激地接受!