2015-04-20 27 views
0

我的ViewPager無法正常工作。我不知道我的代碼有什麼問題。我現在面臨的一些問題,我Fragments:基本上Viewpager不能使用分段

,我有一個Fragment名爲MyListFragment,有一個列表,列表項的單擊事件我移動到一個名爲FlowersFragment第二Fragment具有ViewPager有三個項目(另三個Fragments)。我在我的FlowersFragment中有一個Button,點擊那個Button我轉到名爲WelcomeFragment的第三個屏幕。現在我有一個問題:

如果我回到FlowersFragmentWelcomeFragment然後從ViewPager一些研究,我得到了像使用childFragmentManager在創建適配器解決方案後會失去一些Fragments。這對我的尋呼機來說很好,所有Fragments現在都正確顯示在我的FlowersFragment尋呼機中。但如果我回到MyListFragment,我點擊ListFragment的第二或第三項,它顯示我沒有活動的例外。

這是我的FirstFragment命名MyListFragment

public class MyListFragment extends Fragment{ 

private View view; 
private FragmentManager fm; 
private FragmentTransaction ft; 
private ListView listviewPlaces; 
private FloristAdapter adapter; 
private ArrayList<FloristItems> items = new ArrayList<FloristItems>(); 
private FlowersFragment frag; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    inflater = LayoutInflater.from(getActivity()); 
    view = inflater.inflate(R.layout.fragment_list, container,false); 
    listviewPlaces = (ListView)view.findViewById(R.id.listviewPlaces); 
    return view; 
} 


@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    for (int i = 0; i < 10; i++) { 
     FloristItems florist = new FloristItems(); 
     florist.away = "3 miles away"; 
     florist.title = "Florist Flowers"; 
     florist.price = "$45"; 
     items.add(florist); 
    } 
    adapter = new FloristAdapter(getActivity().getApplicationContext(), items); 
    listviewPlaces.setAdapter(adapter); 

    listviewPlaces.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      if(frag == null){ 
       frag = new FlowersFragment(); 
      } 
      handleFragments(frag);    
     } 
    }); 

} 

private void handleFragments(Fragment fragment){ 

    fm = getActivity().getSupportFragmentManager(); 
    ft = fm.beginTransaction(); 
    ft.replace(R.id.frame_container, fragment); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

} 

在這裏的是,有我FlowersFragment類用含有三個片段視圖尋呼機:

public class FlowersFragment extends Fragment{ 
private View view; 
private FragmentManager fm; 
private FragmentTransaction ft; 
private ViewPager pager; 
private Button btnSendThatFlower; 
private FlowerPagerAdapter pageAdapter; 
private WelcomeFragment welcomeFrag; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    inflater = LayoutInflater.from(getActivity()); 
    view = inflater.inflate(R.layout.fragment_choose_flower_buyer, container,false); 

    pager = (ViewPager)view.findViewById(R.id.viewpager); 
    btnSendThatFlower = (Button)view.findViewById(R.id.btnSendThatFlower); 

    return view; 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    pageAdapter = new FlowerPagerAdapter(getActivity().getSupportFragmentManager()); 
    pager.setAdapter(pageAdapter); 

    btnSendThatFlower.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if(welcomeFrag == null){ 
       welcomeFrag = new WelcomeFragment(); 
      } 
      handleFragments(welcomeFrag); 
     } 
    }); 

} 

private void handleFragments(Fragment fragment){ 

    fm = getActivity().getSupportFragmentManager(); 
    ft = fm.beginTransaction(); 
    ft.replace(R.id.frame_container, fragment); 
    ft.addToBackStack(null); 
    ft.commit(); 
} } 

這是我的尋呼機適配器類:

public class FlowerPagerAdapter extends FragmentPagerAdapter{ 

private ArrayList<Fragment> pagerItems; 

public FlowerPagerAdapter(FragmentManager fm) { 
    super(fm); 
    pagerItems = new ArrayList<Fragment>(); 
    pagerItems.add(FlowerImage1.getInstance()); 
    pagerItems.add(FlowerImage2.getInstance()); 
    pagerItems.add(CustomFlowerFragment.getInstance()); 

} 


@Override 
public Fragment getItem(int num) { 
    if (num == 0) { 
     return new FlowerImage1(); 
    } 
    else if(num == 1) { 
     return new FlowerImage2(); 
    } 
    else{ 
     return new CustomFlowerFragment.getInstance(); 
    } 
} 
@Override 
public int getCount() { 
    return pagerItems.size(); 
} 

@Override 
public void restoreState(Parcelable state, ClassLoader loader) { 
    //super.restoreState(state, loader); 
}} 

FlowerImage1FlowerImage1CustomFlowerFragment是僅有imageview的片段。

這是我的最後一個片段WelcomeFragment

public class WelcomeFragment extends Fragment{ 

private View view; 
private FragmentManager fm; 
private FragmentTransaction ft; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    inflater = LayoutInflater.from(getActivity()); 
    view = inflater.inflate(R.layout.fragment_write_note_buyer, container,false); 

    return view; 
}} 

,當我回壓按則其在viewpager但刷卡後沒有表現出片段上查看傳呼機其只顯示第一個或最後一個有時尋呼機片段。

+1

我們不能幫你,沒有代碼或堆棧跟蹤。 – Emmanuel

+0

@Emmanuel請檢查我的代碼。 –

回答

0

我也遇到過相同的問題,最終在片段適配器中添加了以下代碼。

@Override 
public void restoreState(Parcelable state, ClassLoader loader) { 
    //super.restoreState(state, loader); 
} 
+0

得到同樣的錯誤.. –

0

我也面臨着同樣的問題,但我通過延長,而不是FragmentPagerAdapter「FragmentStatePagerAdapter」固定它。對於你的情況,這將是:

public class FlowerPagerAdapter extends FragmentStatePagerAdapter{ 
 

 
private ArrayList<Fragment> pagerItems; 
 

 
public FlowerPagerAdapter(FragmentManager fm) { 
 
    super(fm); 
 
    pagerItems = new ArrayList<Fragment>(); 
 
    pagerItems.add(FlowerImage1.getInstance()); 
 
    pagerItems.add(FlowerImage2.getInstance()); 
 
    pagerItems.add(CustomFlowerFragment.getInstance()); 
 

 
} 
 

 

 
@Override 
 
public Fragment getItem(int num) { 
 
    if (num == 0) { 
 
     return new FlowerImage1(); 
 
    } 
 
    else if(num == 1) { 
 
     return new FlowerImage2(); 
 
    } 
 
    else{ 
 
     return new CustomFlowerFragment.getInstance(); 
 
    } 
 
} 
 
@Override 
 
public int getCount() { 
 
    return pagerItems.size(); 
 
} 
 
}

+0

好的,謝謝我會盡力..然後會回來給你... –