Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取当前片段变量值_Android_Android Fragments_Fragmentstatepageradapter - Fatal编程技术网

Android 获取当前片段变量值

Android 获取当前片段变量值,android,android-fragments,fragmentstatepageradapter,Android,Android Fragments,Fragmentstatepageradapter,我正在使用FragmentViewPagerAdapter创建日历活动。每个片段代表一天,我的主要活动上有一个开关,允许用户过滤每个片段的结果。 我使用ViewModel来请求数据,所以当检查开关时,我需要向我的服务器发出新的请求,以获取每个片段的新数据,我的问题是,当我发出请求时,发送的日期是下一个片段的日期,而不是当前片段的日期 我已经尝试将屏幕页面数限制为0,但没有任何更改 public class PoiPlanningFragment extends Fragment implemen

我正在使用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;
}


}
公共类PoiPlanningFragment扩展了片段实现InitApplicationListener{
MutableLiveData filtered=新的MutableLiveData();
私有上下文;
日期时间开始时间;
日期时间结束时间;
切换器=getActivity().findViewById(R.id.app\u切换器);
公共规划片段(){
//必需的空公共构造函数
}
公共静态片段getInstance(int位置、字符串日期、字符串resourceId、字符串resourceType、布尔过滤器){
Bundle=新Bundle();
bundle.putInt(“位置”,位置);
bundle.putString(“日期”,date);
bundle.putString(ARG\u RESOURCE\u ID,resourceId);
bundle.putString(参数资源类型,资源类型);
PoiPlanningFragment tabFragment=新的PoiPlanningFragment();
tabFragment.setArguments(bundle);
返回片段;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
DateTimeFormatter horaire=DateTimeFormat.forPattern(“yyyy-MM-dd-HH:MM”);
startTime=horaire.parseDateTime(date.concat(“+STARTHOUR”);
endTime=horaire.parseDateTime(date.concat(“+ENDHOUR));
//为该碎片膨胀布局
返回充气机。充气(R.layout.fragment\u poi\u planning,容器,错误);
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
//切换我的会议
setOnCheckedChangeListener(新的SwitchClickedListener(this.filtered));
//观察用户在自己的会议上是否有筛选器
过滤。观察(此,过滤->{
//此处startTime始终显示下一个选项卡startTime和endTime
BookingRepository.getUserPlanning(规划、资源ID、实用程序.toTimeStamp(startTime)、实用程序.toTimeStamp(endTime)、过滤);
loader.setVisibility(View.VISIBLE);
});
}
}
私有类SwitchClickedListener实现CompoundButton.OnCheckedChangeListener{
可变livedata监听器;
SwitchClickedListener(可变LiveData listener){
this.listener=listener;
}
@凌驾
检查更改后的公共无效(复合按钮复合按钮,布尔b){
//将过滤器设置为true
this.listener.setValue(b);
}
}
公共类PoiPlanningViewPagerAdapter扩展了FragmentStatePagerAdapter{
private final static String TAG=PoiPlanningViewPagerAdapter.class.getName();
私人名单日期表;
私人语境;
私有字符串POID;
私有字符串资源类型;
公共PoiPlanningViewPagerAdapter(FragmentManager格式、列表日期、字符串poidId、字符串资源类型、上下文){
超级(fm);
this.dateList=日期;
this.context=上下文;
this.poid=poidId;
this.resourceType=resourceType;
}
@凌驾
公共片段getItem(int位置){
Date datetime=dateList.get(位置);
DateFormat df=新的简化格式(“yyyy-MM-dd”);
字符串日期=df.format(日期时间);
PoiPlanningFragment planningFragment=(PoiPlanningFragment)PoiPlanningFragment.getInstance(位置、日期、POID、资源类型,false);
返回计划碎片;
}
@凌驾
public int getCount(){
return dateList.size();
}
@凌驾
公共字符序列getPageTitle(int位置){
Date datetime=dateList.get(位置);
DateFormat df=新的SimpleDataFormat(context.getString(R.string.date_格式));
字符串日期=df.format(日期时间);
返回日期;
}
}

在前面的代码中,如果我检查开关,并且我在周一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
        }
    } 

我希望这将对您有所帮助。

您可以使用supportFragmentManager获取当前片段

if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
        val frag = getSupportFragmentManager().findFragmentById(R.id.container);
        if (frag is HomeFragment) {
           Fragment currentFragment = (HomeFragment) frag;
            //do your code
            return
        }
    } 
下面的代码将帮助您

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

我希望这能对您有所帮助。

您能在开始片段的地方发布代码部分吗?我添加了适配器代码,似乎是
日期列表
数组的位置有问题。您是否尝试过日期列表。获取(位置1)?是,当活动第一次启动时,问题就出现了。正确的开始位置是0,因此如果我输入-1,我将得到一个错误。什么是
STARTHOUR
ENDHOUR
值?您是否也可以在开始片段的地方发布代码部分?我添加了适配器代码,似乎在
dateList
数组。您是否尝试过日期列表。获取(位置-1)?是的,问题出现在活动开始时第一次正确从位置0开始,因此如果我输入-1,我将得到一个错误。
STARTHOUR
ENDHOUR
值是什么?谢谢您的回答,但它似乎没有解决问题,因为我从片段中得到了0个计数。谢谢你的回答,但它似乎没有解决问题,因为我从片段中得到了0个计数。
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
        val frag = getSupportFragmentManager().findFragmentById(R.id.container);
        if (frag is HomeFragment) {
           Fragment currentFragment = (HomeFragment) frag;
            //do your code
            return
        }
    }