android - 获取当前片段变量值
问题描述
我正在使用 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 日它将加载星期二的数据。
解决方案
您可以使用 supportFragmentManager 获取当前片段。
下面的代码会帮助你。
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
val frag = getSupportFragmentManager().findFragmentById(R.id.container);
if (frag is HomeFragment) {
Fragment currentFragment = (HomeFragment) frag;
//do your code
return
}
}
我希望这能帮到您。
推荐阅读
- python - 使用 matplotlib 将最大和最小滑块添加到按钮
- c++ - VS2017,C++ 包含目录与附加包含目录,子文件夹包含失败 - 但为什么?
- solr - 如何在 Solr 7.5 中通过 POST 工具索引 csv 时禁止创建 copyFields?
- django - Django 使用 python-requests 进行身份验证
- c# - 是否可以使用 SecureString 作为 ProtectedData.Protect 的参数?
- gstreamer - GStreamer:如果音频比视频短,如何生成静音
- node.js - 在 Firebase 实时数据库中创建新密钥时如何获取电子邮件
- angular - ag-grid:根据同一行其他单元格中的内容禁用单元格
- mysql - 是否可以使用 EXISTS 而不是带有 DISTINCT 的 IN 子句来优化查询
- elasticsearch - 从 Elastic Search 的索引中获取未在聚合中使用的字段值