1
FragmentPagerAdapter를 사용하여 ViewPager와 함께 ListFragment를 사용하려고합니다. 호출기는 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;
}
}
"Argument"(setArguments() & getArguments)로 조각을 저장하는 것이 좋습니다. 그래야 액티비티/프래그먼트가 다시 생성 될 때 자동으로 복구 될 수 있습니다. (코드를 "onSavedInstance"메서드에 저장합니다.) – Sean
잘 잡으세요! 감사합니다 작동하도록 가정과 같이 작동합니다. setArguments() 메소드에 관해서 : 그것은 Bundle 인수를 받아들이며, 알 수 있듯이 커스텀 객체의 ArrayList를 사용하고 있으므로 번들에 전달할 수 없습니다. –
@MarcinS. ArrayList를 Bundle에 넣을 수 있습니다 (이미 Serializable을 구현하고 있기 때문에). 그러나 원하는대로 :) 행운을 빌어 요 – Sean