首先,我有这个工作,但它并不像我想的那么顺利。这就是我在做的事情:
我在片段中有一个TimePicker,并且我设置了onTimeChangedListener,这样每当它发生变化时,它会抓住小时和分钟,将它们打包在userInfo对象中,并将其传递回活动。问题在于,当我这样做时,我正在使用新信息创建一个新片段,因为我不确定如何保存我的所有数据。是否有某种方法可以将onTimeChangedListener更改为仅在自动更改截止日期后才触发' x'时间量?
这是我设置onTimeChangedListener并将其传递回Activity的地方:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_time_calculation, container, false);
TimePicker userTime = (TimePicker) view.findViewById(R.id.timePicker);
userTime.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener(){
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
bUserInfo.settHour(hourOfDay);
bUserInfo.settMinute(minute);
timeChanged(bUserInfo);
}
});
return view;
}
public void timeChanged(userInfo userInfo){
if (mListener != null){
mListener.timeWasChanged(userInfo);
}
}
public interface OnFragmentInteractionListener {
public void timeWasChanged(userInfo userInfo);
}
在活动中,我通过以下方式实现此接口:
@Override
public void timeWasChanged(userInfo userInfo) {
if (userInfo != null){
this.userInfo = userInfo;
}
else {
userInfo = this.userInfo;
}
saveUserInfoToSharedPrefs(userInfo);
FragmentManager fragmentManager = getFragmentManager();
Fragment newFragment = new TimeCalculation().newInstance(userInfo);
VISIBLE_FRAGMENT_TAG = newFragment.toString();
fragmentManager.beginTransaction()
.replace(R.id.container, newFragment, VISIBLE_FRAGMENT_TAG)
.setTransition(FragmentTransaction.TRANSIT_NONE)
.commit();
}
所以我的问题的核心:有没有更好的方法来做到这一点?每次用户更改时间(至少在Galaxy S4上,有TimePicker的连续轮子),它不能连续滑动,如果我向上或向下滑动小时,我必须拿起我的手指每小时后重新刷一次。分钟也一样。我想知道是否有一种更优雅的方式来处理这种沟通,或者是否有解决方法来解决这一问题。
感谢您的时间和精力!