Получение текущих значений переменных фрагмента - PullRequest
0 голосов
/ 14 февраля 2019

Я использую FragmentViewPagerAdapter для создания календаря.Каждый фрагмент представляет день, и у меня есть переключатель «Моя основная деятельность», который позволяет пользователю фильтровать результаты по каждому фрагменту.Я использую ViewModel для запроса данных, поэтому, когда переключатель проверен, мне нужно сделать новый запрос к моему серверу, чтобы получить новые данные для каждого фрагмента. Моя проблема в том, что когда я делаю свой запрос, отправленный день является датой следующего фрагмента,не текущий

Я уже пытался ограничить количество страниц экрана 0, но ничего не изменилось.

public class PoiPlanningFragment extends Fragment implements InitApplicationListener{

MutableLiveData<Boolean> filtered = new MutableLiveData<>();
private Context mContext;
DateTime startTime;
DateTime  endTime;
switcher = getActivity().findViewById(R.id.app_switcher);

public PoiPlanningFragment() {
    // Required empty public constructor
}


public static Fragment getInstance(int position, String date, String resourceId, String resourceType,boolean filter) {
    Bundle bundle = new Bundle();
    bundle.putInt("pos", position );
    bundle.putString("date", date);
    bundle.putString(ARG_RESOURCE_ID, resourceId);
    bundle.putString(ARG_RESOURCE_TYPE, resourceType);
    PoiPlanningFragment tabFragment = new PoiPlanningFragment();
    tabFragment.setArguments(bundle);
    return tabFragment;
}

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    DateTimeFormatter horaire = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm");
    startTime = horaire.parseDateTime(date.concat(" " + STARTHOUR));
    endTime = horaire.parseDateTime(date.concat(" " + ENDHOUR));
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_poi_planning, container, false);
}

 @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

//Switch my meetings
    switcher.setOnCheckedChangeListener(new SwitchClickedListener(this.filtered));

     //Observes whether the user has a filter on own meetings or not
    filtered.observe(this, filtered -> {
        //here startTime always shows next tab startTime and endTime
        BookingRepository.getUserPlanning(planning,resourceId,Utility.toTimeStamp(startTime),Utility.toTimeStamp(endTime), filtered);
        loader.setVisibility(View.VISIBLE);
    });

}

}

private class SwitchClickedListener implements CompoundButton.OnCheckedChangeListener{
    MutableLiveData<Boolean> listener;

    SwitchClickedListener(MutableLiveData<Boolean> listener){
        this.listener = listener;
    }
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        //Set filter to true
        this.listener.setValue(b);
    }
}


public class PoiPlanningViewPagerAdapter extends FragmentStatePagerAdapter {

private final static String TAG = PoiPlanningViewPagerAdapter.class.getName();
private List<Date> dateList;
private Context context;
private String poiId;
private String resouceType;

public PoiPlanningViewPagerAdapter(FragmentManager fm, List<Date> dates, String poidId,String resourceType, Context context) {
    super(fm);
    this.dateList = dates;
    this.context = context;
    this.poiId = poidId;
    this.resouceType = resourceType;
}

@Override
public Fragment getItem(int position) {
    Date datetime = dateList.get(position);
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String date = df.format(datetime);
    PoiPlanningFragment planningFragment = (PoiPlanningFragment) PoiPlanningFragment.getInstance(position, date, poiId,resouceType,false);
    return planningFragment;
}

@Override
public int getCount() {
    return dateList.size();
}

@Override
public CharSequence getPageTitle(int position) {
    Date datetime = dateList.get(position);
    DateFormat df = new SimpleDateFormat(context.getString(R.string.date_format));
    String date = df.format(datetime);
    return date;
}


}

В предыдущем коде, если я проверю переключатель и нахожусь в понедельник 02 11-го, он загрузит данные вторника.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать supportFragmentManager для получения текущего фрагмента.

приведенный ниже код поможет вам.

if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
        val frag = getSupportFragmentManager().findFragmentById(R.id.container);
        if (frag is HomeFragment) {
           Fragment currentFragment = (HomeFragment) frag;
            //do your code
            return
        }
    } 

Надеюсь, это поможет вам.

...