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

回答

2

好伴侶, 問題是你已經聲明您陣列成員爲「靜態」,

private static ArrayList<Restaurant> restaurantsList;

失去了靜態和你應該罰款。

+0

我還建議你將數組作爲「參數」(setArguments()和getArguments)保存在片段中,以便在重新創建活動/片段時自動恢復。 (將你的代碼保存在「onSavedInstance」方法中) – Sean

+0

好的!感謝它運作,假設工作。關於setArguments()方法:它接受一個Bundle參數,正如你所看到的,我使用了自定義對象的ArrayList,因此我不能將它傳遞給Bundle。 –

+0

@MarcinS。你可以把一個arrayList放在一個Bundle中(因爲它已經實現了Serializable)。但是,如你所願:)祝你好運 – Sean

相關問題