基于Fragment中的onTimeChangedListener将信息从Fragment传递给Activity

时间:2014-07-26 04:03:41

标签: android android-fragments fragment timepicker

首先,我有这个工作,但它并不像我想的那么顺利。这就是我在做的事情:

我在片段中有一个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的连续轮子),它不能连续滑动,如果我向上或向下滑动小时,我必须拿起我的手指每小时后重新刷一次。分钟也一样。我想知道是否有一种更优雅的方式来处理这种沟通,或者是否有解决方法来解决这一问题。

感谢您的时间和精力!

0 个答案:

没有答案