2013-01-12 5 views
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; 
    } 
} 

답변

2

잘 동료, 문제는 당신이 "정적"같이 배열 구성원을 선언 한 것입니다,

private static ArrayList<Restaurant> restaurantsList;

정적을 잃고 당신은 괜찮을 것 : 여기에 코드입니다.

+0

"Argument"(setArguments() & getArguments)로 조각을 저장하는 것이 좋습니다. 그래야 액티비티/프래그먼트가 다시 생성 될 때 자동으로 복구 될 수 있습니다. (코드를 "onSavedInstance"메서드에 저장합니다.) – Sean

+0

잘 잡으세요! 감사합니다 작동하도록 가정과 같이 작동합니다. setArguments() 메소드에 관해서 : 그것은 Bundle 인수를 받아들이며, 알 수 있듯이 커스텀 객체의 ArrayList를 사용하고 있으므로 번들에 전달할 수 없습니다. –

+0

@MarcinS. ArrayList를 Bundle에 넣을 수 있습니다 (이미 Serializable을 구현하고 있기 때문에). 그러나 원하는대로 :) 행운을 빌어 요 – Sean

관련 문제