簡體   English   中英

FragmentStatePagerAdapter中的getItem()調用了兩次

[英]getItem() in FragmentStatePagerAdapter called twice

我在getItem()方法上有問題。 我已經閱讀了一些評論和答案,但不了解如何實施。

這是我的代碼:

public Fragment getItem(int position) {
    currentItem = position;
    System.out.println("getItem : "+position);
    if(NumbOfTabs == 4){
        if(position == 0) // if the position is 0 we are returning the First tab
        {
            OpenJobTab tab = new OpenJobTab();
            return tab;
        }
        else if (position == 1)            // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
        {
            ClosedJobTab tab = new ClosedJobTab();
            return tab;
        }
        else if (position == 2)            // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
        {
            AssignedJobTab tab = new AssignedJobTab();
            return tab;
        }
        else            // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
        {
            ToDoJobTab tab = new ToDoJobTab();
            return tab;
        }
    }else{
        if(position == 0) // if the position is 0 we are returning the First tab
        {
            OpenJobTab tab = new OpenJobTab();
            return tab;
        }
        else if (position == 1)            // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
        {
            ClosedJobTab tab = new ClosedJobTab();
            return tab;
        }
        else            // As we are having 2 tabs if the position is now 0 it must be 1 so we are returning second tab
        {
            ToDoJobTab tab = new ToDoJobTab();
            return tab;
        }
    }

}

這是使用適配器調用的Fragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.tabbed_fragment, container, false);
    sharedpreferences = getActivity().getSharedPreferences(PREFERENCES, Context.MODE_PRIVATE);
    isAdmin = sharedpreferences.getBoolean(getString(R.string.prefs_key_isAdmin), false);
    isTeam = sharedpreferences.getBoolean(getString(R.string.prefs_key_isTeam), false);

    TitlesAdmin = getResources().getStringArray(R.array.isAdminTabs);
    TitlesTeam = getResources().getStringArray(R.array.isTeamTabs);

    ws = new WebService(getActivity());

    // Inflate the layout for this fragment
    // Creating toolbar and set it as the Toolbar
    toolbar = (Toolbar) v.findViewById(R.id.tool_bar);
    toolbar.setOnMenuItemClickListener(new OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // TODO Auto-generated method stub

            switch(item.getItemId()){
                case R.id.home:
                    Toast.makeText(getActivity(), "HOME", Toast.LENGTH_SHORT).show();
            }

            return true;
        }
    });

    ActionBarActivity activity = (ActionBarActivity)getActivity();
    activity.setSupportActionBar(toolbar);
    activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    activity.getSupportActionBar().setDisplayShowTitleEnabled(false);

    // Creating the viewpageradapter and passing fragment
    if((isAdmin) && (isTeam) || (isAdmin)){
        Numboftabs=4;
        adapter =  new TabbedAdapter(getActivity().getSupportFragmentManager(), TitlesAdmin, Numboftabs);
    }else{
        Numboftabs=3;
        adapter =  new TabbedAdapter(getActivity().getSupportFragmentManager(), TitlesTeam, Numboftabs);
    }

    // Assigning ViewPager view and setting the adapter
    pager = (ViewPager) v.findViewById(R.id.pager);
    pager.setAdapter(adapter);
    pager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            adapter.getItem(arg0);
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });
    // Assigning the Sliding Tab Layout View
    tabs = (SlidingTabLayout) v.findViewById(R.id.tabs);
    tabs.setDistributeEvenly(true);

    // Setting custom color for the scroll bar indicator
    tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {

        @Override
        public int getIndicatorColor(int position) {
        // TODO Auto-generated method stub
            return getResources().getColor(R.color.tabsScrollColor);
        }

        @Override
        public int getDividerColor(int position) {
        // TODO Auto-generated method stub
            return 0;
        }
    });
        // Setting the ViewPager For the SlidingTabsLayout
    tabs.setViewPager(pager);
    setHasOptionsMenu(true);


  return v;
}

請幫助我。...非常感謝。

getItem(..)將始終被調用兩次,因為它將加載用戶看到的當前視圖,並且始終加載用戶尚無法看到的下一個視圖。 這樣可以使屏幕(視圖)之間的過渡更加平滑。

您可以通過調用以下命令來設置適配器應加載的屏幕數:

mViewpager.setOffscreenPageLimit(5);

其中5是要提前加載的屏幕數。 這意味着getItem現在將被調用五次。

OffScreenPages的最小數量為1,無法將其設置為0,因此getItem(..)將始終至少執行兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM