[英]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.