0

関連付けられているボタンに setText を設定するために、 onTimeSet() メソッドに何を配置すればよいかわかりません。

ユーザーがレイアウトのボタンをクリックすると、TimePickerDialog が表示されます。ユーザーが使用したい時間を選択したら、その時間を同じボタンのテキストに設定したいと思います。

何か案は?

public class TimePickerFragment extends DialogFragment implements
    TimePickerDialog.OnTimeSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current time as the default values for the picker
    final Calendar c = Calendar.getInstance();
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);

    // Create a new instance of TimePickerDialog and return it
    return new TimePickerDialog(getActivity(), this, hour, minute,
            DateFormat.is24HourFormat(getActivity()));
}

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    // Do something with the time chosen by the user


}

}
4

4 に答える 4

1

ええ、フラグメントから含まれているアクティビティにデータを戻すのは少し複雑です。

基本的には 2 つのオプションがあります。1 つは単純で簡単な方法で、もう 1 つはより洗練されていますが、長期的には (そしてより複雑な要件の場合)、より良い方法になります。

単純

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    String timeString = hourOfDay+" "+minute; // <-- just for example, you'll want to do better time-formatting here.
    Button b = (Button)getActivity().findViewById(R.id.yourButtonsId);
    b.setText(timeString);
}

洗練された

Fragment でListenerインターフェイスを使用し、Activity にそのインターフェイスを実装させ、それ自体を Fragment の Listener として設定します。

これをフラグメントに追加します。

public interface Listener {
    public void setTime(int hourOfDay, int minute);
}

// hold the listener
private Listener mListener;

// used by Activity to set itself as the listener for the fragment
public void setListener(Listener listener) {
    mListener = listener;
}

次のように Fragment に実装onTimeSetします。

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    if (mListener != null) mListener.setTime(hourOfDay, minute);
}

implements TimePickerFragment.ListenerActivity のクラス宣言に追加します。

public void setTime(int hourOfDay, int minute)たとえば、次のように、アクティビティにリスナーのメソッドを実装します。

public void setTime(int hourOfDay, int minute) {
    String timeString = hourOfDay+" "+minute; // <-- just for example, you'll want to do better time-formatting here.
    Button b = (Button)findViewById(R.id.yourButtonsId);
    b.setText(timeString);
}

フラグメントをインスタンス化した後、これをアクティビティに追加します。

timePickerFragment.setListener(this);
于 2013-09-06T06:00:38.877 に答える
0

この次の手順を使用して、あなただけ

 private void SetTime() {
        buttonTaskTime.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String taskTime = buttonTaskTime.getText().toString();
                int mHour = Integer.parseInt(taskTime.split(":")[0]);
                String minutesmeridian = taskTime.split(":")[1];
                int mMinute = Integer.parseInt(minutesmeridian.split(" ")[0]);
                String mMeridian = minutesmeridian.split(" ")[1];
                if (mMeridian.equals(postMeridain)) {
                    if (!(mHour == 12)) {
                        mHour += 12;
                    }

                } else {
                    if (mHour == 12) {
                        mHour += 12;
                    }
                }
                hour = mHour;
                minute = mMinute;
                new TimePickerDialog(getActivity(), R.style.Theme_CustomDialog,
                        timePicker, hour, minute, false).show();
            }
        });
    }
TimePickerDialog.OnTimeSetListener timePicker = new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
            hour = hourOfDay;
            minute = minutes;
            calendarNewTaskTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
            calendarNewTaskTime.set(Calendar.MINUTE, minutes);
            calendarNewTaskTime.set(Calendar.SECOND, 0);
            UpdateTime();
        }
    };

private void UpdateTime() {
        String meridian = " ";
        if (hour > 12) {
            hour -= 12;
            meridian = "PM";
        } else if (hour == 0) {
            hour = 12;
            meridian = "AM";
        } else if (hour == 12)
            meridian = "PM";
        else
            meridian = "AM";
        String min = " ";
        if (minute < 10) {
            min = "0" + minute;
        } else
            min = String.valueOf(minute);
        buttonTaskTime.setText(hour + ":" + min + " " + meridian);
    }
于 2013-09-06T04:36:08.053 に答える
0
   // button click listener
   button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if(button.getText().toString().trim().length()>0){
                getTimeDialog(button.getText().toString(), new CustomClickListner() {

                   @Override
                    public void onClick(String value) {
                    btnLogin.setText(value);
                    }
                });
            }else{
                getTimeDialog("", new CustomClickListner() {

                   @Override
                    public void onClick(String value) {
                    btnLogin.setText(value);
                    }
                });
            }
    }
});


     // custom interface time dialog set time listener
     public interface CustomClickListner {
      public void onClick(String value);
    }

     // open time dialog
     public void getTimeDialog(final String strTime, final CustomClickListner target) {

    Calendar date = getTimeFromString(strTime);
    TimePickerDialog timeDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Calendar date = Calendar.getInstance();
            date.set(Calendar.HOUR_OF_DAY, hourOfDay);
            date.set(Calendar.MINUTE, minute);
            String dateString = new SimpleDateFormat("kk:mm:ss").format(date);
            target.onClick(dateString);
        }
    }, date.get(Calendar.HOUR), date.get(Calendar.MINUTE), true);

    timeDialog.show();

}
于 2013-09-06T04:12:57.653 に答える