Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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
Java 如何提取同一onTimeSet()中两个时间选择器对话框的小时和分钟数?_Java_Android_Android Fragments_Timepicker - Fatal编程技术网

Java 如何提取同一onTimeSet()中两个时间选择器对话框的小时和分钟数?

Java 如何提取同一onTimeSet()中两个时间选择器对话框的小时和分钟数?,java,android,android-fragments,timepicker,Java,Android,Android Fragments,Timepicker,我已经在按钮按下时实现了时间选择器,它们位于一个片段(Work)中,但是如何仅使用位于MainActivity中的一个onTimeSet()来提取两个对话框的小时和分钟数以分离变量 这是我的main活动中的onTimeSet(): public void onTimeSet(TimePicker timePicker, int i, int i1) { TextView textView = (TextView)findViewById(R.id.textstart);

我已经在按钮按下时实现了时间选择器,它们位于一个片段(
Work
)中,但是如何仅使用位于
MainActivity
中的一个onTimeSet()来提取两个对话框的小时和分钟数以分离变量

这是我的
main活动中的
onTimeSet()

    public void onTimeSet(TimePicker timePicker, int i, int i1) {
        TextView textView = (TextView)findViewById(R.id.textstart);
        textView.setText("Hour: "+ i + " Minutes: "+ i1);

        getSupportFragmentManager().getFragments();

    }
这是我的
作品
片段:

Button timeButton = (Button) view.findViewById(R.id.timeButton);
        timeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogFragment timePicker = new TimePicker_Fragment();
                timePicker.show(getFragmentManager(), "Time Picker");
            }
        });

        Button timeButton2 = (Button) view.findViewById(R.id.timeButton2);
        timeButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogFragment timePicker2 = new TimePicker_Fragment();
                timePicker2.show(getFragmentManager(), "Time Picker 2");
            }
        });

        return view;
    }

我不确定我是否理解这个问题

您是否尝试过类似的方法(不确定确切的语法):


您还可以将侦听器添加到
TimePicker\u Fragment
构造函数中,以在更新时获取新的小时和分钟

一个选项是更改应用程序的体系结构:

由于
TimePickerFragment
是唯一能够理解
onTimeSet()
中的
TimePicker
参数的,因此它是实现
TimePickerDialog.OnTimeSetListener
的逻辑选择

TimePicker\u Fragment
的两个实例可以通过一些自定义接口向宿主
WorkFragment
(以及最终的
活动
)报告。在自定义版本的
onTimeSet()
中,使用一些唯一值(字符串或枚举)来标识它们

例如,您的活动可以实现如下方法:

@Override
void onCustomTimeSet(String timePickerId, int hour, int minutes){
    switch(timePickerId){
        case "TIME_PICKER":
            // code for time  picker 1 here
            break;
        case "TIME_PICKER_2":
            // code for time  picker 1 here
            break;
    }
    // ...
}
…这将由
TimePicker\u片段中的“normal”
onTimeSet(TimePicker,int,int)
的实现调用

@Override
void onTimeSet(TimePicker timePicker, int i, int i2){
    ((CustomTimePickerListener)getActivity()).onCustomTimeSet("TIME_PICKER_1", i, i2)
}
void onTimeSet(TimePicker timePicker, int i, int i2){
    timePicker.setTag("TIME_PICKER");
    ((TimePickerDialog.OnTimeSetListener)getActivity()).onTimeSet(timePicker, i, i2);
}

另一种选择是利用
时间选择器
视图
,并且
视图
可以有一个标记(可以是任何类型的
对象
,请参阅)

因此,您可以让
TimePicker\u Fragment
TimePicker
设置一个标记

由于
TimePicker
TimePickerDialog
的一部分,因此设置标记的最简单方法似乎是(再次)使用
TimePicker\u片段
实现
TimePickerDialog.OnTimeSetListener
。但这一次,
活动
可以实现相同的接口:

时间选择器片段中的代码

@Override
void onTimeSet(TimePicker timePicker, int i, int i2){
    ((CustomTimePickerListener)getActivity()).onCustomTimeSet("TIME_PICKER_1", i, i2)
}
void onTimeSet(TimePicker timePicker, int i, int i2){
    timePicker.setTag("TIME_PICKER");
    ((TimePickerDialog.OnTimeSetListener)getActivity()).onTimeSet(timePicker, i, i2);
}
活动中的代码

void onTimeSet(TimePicker timePicker, int i, int i2){
    String tag = (String)timePicker.getTag();
    switch(tag){
        case "TIME_PICKER":
            // code for time  picker 1 here
            break;
        case "TIME_PICKER_2":
            // code for time  picker 2 here
            break;
    }
    // ...
}

为三个相关组件实现第二个解决方案的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, new Work()).commit();
    }

    public void onTimeSet(TimePicker timePicker, int i, int i1){
        String tag = (String)timePicker.getTag();
        switch(tag){
            case TIME_PICKER:
                TextView textView = (TextView)findViewById(R.id.textstart);
                textView.setText("Start Hour: "+ i + " Minutes: "+ i1);
                break;
            case TIME_PICKER_2:
                TextView textView2 = (TextView)findViewById(R.id.textend);
                textView2.setText("Start Hour: "+ i + " Minutes: "+ i1);
                break;
        }
    }
}
Work.java

public class Work extends Fragment {

    public static final String TIME_PICKER = "TIME_PICKER";
    public static final String TIME_PICKER_2 = "TIME_PICKER_2";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_work, container, false);
        getActivity().setTitle("Work");

        Button timeButton = (Button) view.findViewById(R.id.btn1);
        timeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogFragment timePicker = TimePicker_Fragment.instance(TIME_PICKER);
                timePicker.show(getFragmentManager(), "Time Picker");
            }
        });

        Button timeButton2 = (Button) view.findViewById(R.id.btn2);
        timeButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DialogFragment timePicker2 =TimePicker_Fragment.instance(TIME_PICKER_2);
                timePicker2.show(getFragmentManager(), "Time Picker 2");
            }
        });

        return view;
    }
}
TimePicker_Fragment.java

public class TimePicker_Fragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

    private static final String KEY_TIMEPICKER_TAG = "KEY_TIMEPICKER_TAG";

    /**
     *
     * @param timePickerTag the tag by which you can identify a TimePicker.  
     *             Will be set as tag to the TimePicker View in onTimeSet()
     * @return x
     */
    public static TimePicker_Fragment instance(String timePickerTag){
        TimePicker_Fragment fragment = new TimePicker_Fragment();
        Bundle b = new Bundle();
        b.putString(KEY_TIMEPICKER_TAG, timePickerTag);
        fragment.setArguments(b);
        return fragment;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        Context ctx = getContext();
        return new TimePickerDialog(ctx, this, hour, minute, DateFormat.is24HourFormat(ctx));
    }

    public void onTimeSet(TimePicker timePicker, int i, int i2){
        Bundle b = getArguments();
        assert b != null;
        timePicker.setTag(b.getString(KEY_TIMEPICKER_TAG));
        ((TimePickerDialog.OnTimeSetListener)getActivity()).onTimeSet(timePicker, i, i2);
    }
}