[英]android viewpager set current item to 0
ViewPager的前两个页面始终相同,因为切换到第一个元素(索引0)时不会调用适配器。 所有其他片段工作正常。 使用getItem()
的位置会返回完全奇怪的位置,因此我正在使用ViewPager的getCurrentItem()
方法。 时间表活动:
public class TimetableActivity extends FragmentActivity {
private ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen_slide);
ActionBar actionBar = getActionBar();
actionBar.setTitle("Stundenplan");
actionBar.setIcon(new ColorDrawable(getResources().getColor(android.R.color.transparent)));
mPager = (ViewPager) findViewById(R.id.pager);
PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager(), mPager);
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
super.onBackPressed();
} else {
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}}
ScreenSlidePagerAdapter:
public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
private ViewPager pager;
public ScreenSlidePagerAdapter(FragmentManager fm, ViewPager pager) {
super(fm);
this.pager = pager;
}
@Override
public Fragment getItem(int position) {
System.out.println("Current Item: " + pager.getCurrentItem());
return ScreenSlidePageFragment.newInstance(pager.getCurrentItem());
}
@Override
public int getCount() {
return 10;
}}
ScreenSlidePageFragment:
public class ScreenSlidePageFragment extends Fragment {
private List<TableRow> rows;
private int position;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.activity_timetable, container, false);
return rootView;
}
public static ScreenSlidePageFragment newInstance(int num) {
ScreenSlidePageFragment f = new ScreenSlidePageFragment();
Bundle args = new Bundle();
args.putInt("position", num);
f.setArguments(args);
return f;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("Called");
ActionBar actionBar = getActivity().getActionBar();
position = getArguments() != null ? getArguments().getInt("position") : 1;
System.out.println(position);
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
Calendar c = Calendar.getInstance();
if (position == 5) {
actionBar.setTitle("Stundenplan (" + format.format(c.getTime()) + ")");
} else if (position < 5) {
int daysBack = 5 - position;
c.add(Calendar.DAY_OF_MONTH, daysBack * -1);
actionBar.setTitle("Stundenplan (" + format.format(c.getTime()) + ")");
} else {
int daysForward = position - 5;
c.add(Calendar.DAY_OF_MONTH, daysForward);
actionBar.setTitle("Stundenplan (" + format.format(c.getTime()) + ")");
}
}}
因此,问题在于getCurrentItem()
似乎永远不会为0。有人可以帮助我吗?
您怎么知道getCurrentItem不为0,您是否在调试中观察了它的值,或者在按回车时发现活动未完成? 因为如果是第二选择,则您需要知道FragmentActivity onBackPressed()会将片段回栈弹出,直到它为空,然后才完成该活动。 因此,您可能想直接调用finish()而不是super.onBackPressed()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.