繁体   English   中英

android viewpager将当前项目设置为0

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM