Вложенный фрагмент пейджера .setCurrentItem не работает

#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;