1
我想使用帶有ViewPager的ListFragment使用FragmentPagerAdapter。該尋呼機由ListFragment的兩個實例組成。 ViewPager控件工作並允許我在片段之間滑動,但是同一個ListFragment出現在兩個頁面中。看來ViewPager的getItem()方法創建兩個不同的ListFragment實例,但它只顯示兩個頁面的第二個實例。下面是一個代碼:ViewPager爲所有頁面顯示相同的ListFragments
// FragmentPagerAdapter
private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
Log.i("Page: ", index + "");
return PageFragment.newInstance(pages.get(index));
// pages is an ArrayList<ArrayList<Restaurant>> pages
}
@Override
public int getCount() {
return numberOfPages;
}
}
// ListFragment
public class PageFragment extends ListFragment {
private static ArrayList<Restaurant> restaurantsList;
public static PageFragment newInstance(ArrayList<Restaurant> restaurantsList) {
PageFragment pageFragment = new PageFragment();
pageFragment.setRestaurantsList(restaurantsList);
return pageFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
setListAdapter(new RestaurantArrayAdapter(getActivity().getBaseContext(), getRestaurantsList()));
return view;
}
private void setRestaurantsList(ArrayList<Restaurant> list)
{
restaurantsList = list;
}
private ArrayList<Restaurant> getRestaurantsList()
{
return this.restaurantsList;
}
}
我還建議你將數組作爲「參數」(setArguments()和getArguments)保存在片段中,以便在重新創建活動/片段時自動恢復。 (將你的代碼保存在「onSavedInstance」方法中) – Sean
好的!感謝它運作,假設工作。關於setArguments()方法:它接受一個Bundle參數,正如你所看到的,我使用了自定義對象的ArrayList,因此我不能將它傳遞給Bundle。 –
@MarcinS。你可以把一個arrayList放在一個Bundle中(因爲它已經實現了Serializable)。但是,如你所願:)祝你好運 – Sean