0

我試圖在我的應用程序中實現滑動選項卡,遵循在線教程。特別是this one瞭解FrameStatePagerAdapter中的getItem()

我想實現的是:

一個MainActivity基於單一Fragment滑動標籤。每個標籤顯示不同的數據。爲此,我試圖獲取在片段中選中的選項卡的當前位置,但我似乎沒有得到正確的值。我意識到getItem()被稱爲多次的功能,有時根本不會被調用。

那麼如何獲得片段中所選標籤的當前位置?我鏈接的教程將位置值與getItem()的return語句傳遞給位置值,但這看起來不太好,因爲我在日誌和setText中獲得了不同的值。

getItem() 

@Override 
public Fragment getItem(int position) { 
    return PageFragment.newInstance(position + 1); 
} 

PageFragment:

public static PageFragment newInstance(int page) { 
    Bundle args = new Bundle(); 
    args.putInt(ARG_PAGE, page); 
    PageFragment fragment = new PageFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 

位置值之差:

position value fetched in onCreate of fragment

回答

0

我碰到了類似的問題,我決定只徹底改變 「默認」 PagerAdapter所以我自己也不必亂用position

/** 
* TabsPagerAdapter. 
* 
* @author Niels 
* @version 1.0 
* @since 11-9-2015 
*/ 
public class TabsPagerAdapter extends FragmentPagerAdapter { 

    /** 
    * Contains all the fragments. 
    */ 
    private List<Fragment> fragments = new ArrayList<>(); 

    /** 
    * Contains all the tab titles. 
    */ 
    private List<String> tabTitles = new ArrayList<>(); 

    /** 
    * Creates a new PagerAdapter instance. 
    * 
    * @param fragmentManager The FragmentManager. 
    */ 
    public TabsPagerAdapter(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabTitles.get(position); 
    } 

    /** 
    * Adds the fragment to the list, also adds the fragment's tab title. 
    * 
    * @param fragment New instance of the Fragment to be associated with this tab. 
    * @param tabTitle A String containing the tab title for this Fragment. 
    */ 
    public void addFragment(Fragment fragment, String tabTitle) { 
     fragments.add(fragment); 
     tabTitles.add(tabTitle); 
    } 

} 

可以使用此作爲這樣:

@Override 
public void onCreate() { 
    adapter = new TabsPagerAdapter(getSupportFragmentManager()); //TabsPagerAdapter = whatever you named the PagerAdapter 
    addFragments(); 
    viewpager.setAdapter(adapter); //viewpager = ViewPager view instance 
    strip.setViewPager(viewpager); //strip = PagerSlidingTabStrip view instance 
} 

/** 
* Adds fragments to the adapter. 
*/ 
private void addFragments() { 
    adapter.addFragment(new Fragment1(), "Fragment1"); 
    adapter.addFragment(new Fragment2(), "Fragment2"); 
    adapter.addFragment(new Fragment3(), "Fragment3"); 
    adapter.addFragment(new Fragment4(), "Fragment4"); 
} 
+0

我有一個單一的片段裝載基於所選的選項卡不同的數據。所以我回到我的問題,我如何從片段中獲取選定選項卡的位置,因爲getItem()未返回正確的值。 – hemantv