最初の要素(インデックス0)に切り替えるときにアダプタが呼び出されないため、ViewPagerの最初の2ページは常に同じです。他のフラグメントはすべて正常に動作します。 getItem()
の位置を使用すると完全に奇妙な位置が返されるため、私はViewPagerのgetCurrentItem()
メソッドを使用しています。 TimetableActivity:android viewpagerは現在のアイテムを0に設定します
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 はないように思われることでしょうか?