#android #android-activity #android-fragments #callback #android-viewpager
#Android #android-активность #android-фрагменты #обратный вызов #android-viewpager
Вопрос:
У меня есть фрагмент в моем ViewPager, в котором есть указатель даты, если пользователь выбирает дату из средства выбора, он возвращает ее с помощью обратного вызова действия.
Действие получает ViewPagerContainer фрагмента и устанавливает пейджер на другой день в соответствии с датой.
Функция во фрагменте контейнера успешно достигнута, и она регистрирует правильный номер дня, но пейджер не обновляется, он остается на той же странице … никаких сбоев или чего-то в этом роде..
Мой код:
MainAcitivty (вызывает 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;
Фрагмент контейнера (установить пейджер не работает)
@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");
}
}
ChildofContainerFragment (вызывает mainacitivty)
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.Fragment и т.д..
Также я уверен, что число дней не равно нулю, а, например, восемь.
Комментарии:
1. Можете ли вы опубликовать свой BootstrapPagerAdapter?
2. Готово! setcurrentitem работает один раз в onccreateview..
Ответ №1:
Каким-то образом это исправленный фрагмент, который не установлен, потому что, если забыть, что у меня он дважды в моем навигационном ящике, так что это было исправление..
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;