我有一个片段在我的ViewPager中有一个DatePicker,如果用户从选择器中选择一个日期,他将通过回调到活动返回。
该活动获取片段的ViewPagerContainer,并根据日期将分页设置为另一天。
成功到达容器片段中的函数并记录正确的日期,但分页没有更新,它保持在同一页上…没有崩溃之类的。
我代码:mainactivity (调用containerfragment)
public void onDatumSelected(int days) {
RoosterPagerContainer positionRooster = (RoosterPagerContainer) fragmentje;
positionRooster.updatePager(days);
}
fragmentje是在navigationDrawer中设置的
case 0:
getSupportActionBar().setIcon(R.drawable.ic_action_time);
fragment = new RoosterPagerContainer();//this is the contianer
this.fragmentje = fragment;
ContainerFragment (set pager not working)
@InjectView(R.id.vp_pages) ViewPager pager;
public CarouselActivity theActivitiy;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.roosterfragment_container, container, false);
ButterKnife.inject(this, view);
pager.setAdapter(buildAdapter());
pager.setCurrentItem(5000, false);
pager.getAdapter().notifyDataSetChanged();
pager.setOffscreenPageLimit(0);
return view;
}
public void updatePager(int days)
{
Log.e(String.valueOf(days), "This is logged but the pager dont switch???");
//pager.post(new Runnable() {
// public void run() {
pager.setCurrentItem((5000 + days), true);
pager.getAdapter().notifyDataSetChanged();
// }
// });
}
private PagerAdapter buildAdapter() {
return(new BootstrapPagerAdapter(theActivitiy, getChildFragmentManager()));
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
try {
theActivitiy = (CarouselActivity) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " ik snap er niks van");
}
}
childdofcontainerfragment (Calls mainactivity)
OnHeadlineSelectedListener mCallback;
public interface OnHeadlineSelectedListener {
public void onDatumSelected(int days);
}
@Override
public void onDateSet(CalendarDatePickerDialog dialog, int year, int monthOfYear, int dayOfMonth) {
DateTime selectednow = DateTime.forDateOnly(year, (monthOfYear+1), dayOfMonth);
DateTime today = DateTime.now(TimeZone.getDefault());
//if(!(selectednow.isSameDayAs(selected)))
//
int days = (selectednow.getModifiedJulianDayNumber() - today.getModifiedJulianDayNumber());
mCallback.onDatumSelected(days);
}
@Override
public void onAttach(Activity activity) throws ClassCastException {
super.onAttach(activity);
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity
+ " must implement OnHeadlineSelectedListener");
}
}
公共类BootstrapPagerAdapter扩展FragmentPagerAdapter {
public BootstrapPagerAdapter(final FragmentManager fragmentManager) {
super(fragmentManager);
// this.ctxt = ctxt;
}
@Override
public int getCount() {
return 10000;
}
///@Override
//public int getItemPosition(Object object){
// return FragmentStatePagerAdapter.POSITION_NONE;
//}
@Override
public Fragment getItem(int position) {
DateTime pagerdate = DateTime.now(TimeZone.getDefault());
DateTime days = pagerdate.plusDays(position - 5000);
Log.e("Datepager",String.valueOf(days));
Bundle bundle = new Bundle();
bundle.putString("date", days.format("YYYY-MM-DD").toString());
RoosterFragment roosterFragment = new RoosterFragment();
roosterFragment.setArguments(bundle);
return roosterFragment;
}
}
(我改变了一些东西在这段代码当我张贴其他人,但仍然是相同的问题…)
我也使用旧的android设备android.v4的支持。片段等。
我也确定int days不是0而是8
不知何故,它修复了fragmentje没有设置因为我忘记了它在我的导航抽屉中有两次所以这是修复。
case 0:
getSupportActionBar().setIcon(R.drawable.ic_action_time);
fragment = new RoosterPagerContainer();
this.fragmentje = fragment;
break;
case 1:
getSupportActionBar().setIcon(R.drawable.ic_action_time);
fragment = new RoosterPagerContainer();
this.fragmentje = fragment;//this was not before...
break;