2017-04-11 85 views
1

我有一個問題與值傳遞給我的課:通價值尋呼機片段

public class FragmentViewPager extends Fragment { 

    public static int p; 
    private FragmentPagerItemAdapter adapter; 
    private static final String TAG = "log"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.fragment_view_pager, container, false); 

     adapter = new FragmentPagerItemAdapter(
        getChildFragmentManager(), FragmentPagerItems.with(getActivity()) 
        .add("1", AnimalsFragment.class) 
        .add("2", AnimalsFragment.class) 
        .add("3", AnimalsFragment.class) 
        .add("4", AnimalsFragment.class) 
        .add("5", AnimalsFragment.class) 
        .create()); 

     ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
     viewPager.setAdapter(adapter); 

     SmartTabLayout viewPagerTab = (SmartTabLayout) view.findViewById(R.id.viewpagertab); 
     viewPagerTab.setViewPager(viewPager); 

     // определяем позицию фрагмента 
     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

      @Override 
      public void onPageSelected(int position) { 
       p = position; 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) {} 
     }); 

     return view; 
    } 
} 

我得到的值:

public class AnimalsFragment extends Fragment implements View.OnClickListener { 
... 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.fragment_animals, container, false); 

     // получаем позицию фрагмента 
     position = FragmentViewPager.p; 
     Log.i(TAG, "position = " + position); 
... 

日誌:

I/log: position = 1 
I/log: position = 2 
I/log: position = 3 

有5個片段中,不顯示第一個「0」和最後一個「4」。 但是,如果您在方法onPageSelected()日誌中放置日誌顯示正確。 如何正確傳達班級中的分頁值?

+0

請發表您的代碼,包括PagerAdapter –

+0

添加完整的代碼 – user233804

回答

1

ViewPager創建當前,前一個和下一個碎片,您可以使用ViewPager的setOffscreenPageLimit方法設置和更改碎片。 (默認值爲1.您不能將其設置爲0.)

因此,當您將日誌代碼放入onCreateView時,將會創建3個Fragments,並且您會看到日誌三次,並且您的p變量將爲上次創建的片段的位置,因爲您的默認屏幕限制爲1.

而且,當您將日誌代碼放入onPageSelected時,只有在刷卡ViewPager時,您的日誌纔會有效。

在這裏,您可以檢查更詳細: https://developer.android.com/reference/android/support/v4/view/ViewPager.html

+0

但是,如果你把日誌的方法使用onPageSelected()日誌正確顯示。 – user233804

相關問題