Tôi đang sử dụng ViewPager tương thích v4 trong Android. FragmentActivity của tôi có một loạt dữ liệu sẽ được hiển thị theo các cách khác nhau trên các trang khác nhau trong ViewPager của tôi. Cho đến nay tôi chỉ có 3 phiên bản của ListFragment giống nhau, nhưng trong tương lai tôi sẽ có 3 phiên bản ListFragments khác nhau. ViewPager nằm trên màn hình điện thoại dọc, các danh sách không nằm cạnh nhau.
Bây giờ, một nút trên ListFragment bắt đầu một hoạt động toàn trang riêng biệt (thông qua FragmentActivity), trả về và FragmentActivity sửa đổi dữ liệu, lưu nó, sau đó cố gắng cập nhật tất cả các chế độ xem trong ViewPager của nó. Nó ở đây, nơi tôi đang bị mắc kẹt.
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;
}
...
Bây giờ bạn có thể thấy, nỗ lực đầu tiên của tôi là thông báo choDataSetChanged trên toàn bộ FragmentPagerAd CHƯƠNG, và điều này đôi khi cho thấy cập nhật dữ liệu, nhưng những lần khác tôi đã nhận được IllegalStateException: Không thể thực hiện hành động này sau onSaveInstanceState.
Lần thử thứ hai của tôi liên quan đến việc cố gắng gọi một hàm cập nhật trong ListFragment của tôi, nhưng getId trong getItem đã trả về 0. Theo các tài liệu tôi đã thử
có được một tham chiếu đến Fragment từ FragmentManager, sử dụng findFragmentById () hoặc findFragmentByTag ()
nhưng tôi không biết thẻ hoặc id của Fragment của tôi! Tôi có một android: id = "@ + id / viewpager" cho ViewPager và android: id = "@ android: id / list" cho ListView của tôi trong bố cục ListFragment, nhưng tôi không nghĩ chúng hữu ích.
Vì vậy, làm cách nào tôi có thể: a) cập nhật toàn bộ ViewPager một cách an toàn trong một lần (lý tưởng là đưa người dùng trở lại trang mà anh ta đã truy cập trước đó) - người dùng thấy chế độ xem thay đổi. Hoặc tốt hơn là, b) gọi một chức năng trong mỗi ListFragment bị ảnh hưởng để cập nhật ListView theo cách thủ công.
Bất kỳ trợ giúp sẽ được chấp nhận một cách biết ơn!
null
cho mảnh.