Установка результата TimePickerDialog для кнопки через DialogFragment android

1

Добрый день, я буду первым, кто признается, у меня нет опыта использования фрагментов вообще и просто обучения, поэтому, пожалуйста, несите меня. Как говорится в названии, я пытаюсь установить результат из TimePickerDialog на кнопку в моей деятельности, но не добился успеха. Когда я нажимаю кнопку "Пуск", я не вижу обычного TimePickerDialog, все, что я вижу, - это маленький пустой диалог в середине экрана. Так что, пожалуйста, что я могу делать неправильно? Спасибо.

Вот мой код:

TimeDialog:

public class TimeDialog extends DialogFragment {
    private int mHour;
    private int mMinute;

    public TimeDialog(){

    }

    public static TimeDialog newInstance(int title){
        TimeDialog frag = new TimeDialog();
        Bundle args = new Bundle();
        args.putInt("title", title);
        frag.setArguments(args);
        return null;

    }

    private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {

        @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHour = hourOfDay;
                mMinute = minute;

                //updateDisplay();
            }

        /*private void updateDisplay() {

            View v = getActivity().getLayoutInflater().inflate(R.layout.add_resp, null);
            Button start = (Button)v.findViewById(R.id.start_time_button_id);
            start.setText(new StringBuilder().append(mHour).append(":").append(mMinute).toString());


        }*/
        };

    @Override
    public Dialog onCreateDialog(Bundle savedInstancestate){

        return new TimePickerDialog(getActivity(), mTimeSetListener, mHour, mMinute, false);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.add_resp, container, false);
        Button start = (Button)v.findViewById(R.id.start_time_button_id);
        start.setText(new StringBuilder().append(mHour).append(":").append(mMinute).toString());
        return v;

    }   
}

и вот где я называю это от активности:

public class AddResp extends Activity implements OnClickListener {
    EditText text_title;
    Button start;

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_resp);

        text_title = (EditText)findViewById(R.id.title_text_id);
        start = (Button)findViewById(R.id.start_time_button_id);

        start.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        int selection = view.getId();
        switch(selection){
        case R.id.start_time_button_id:

             DialogFragment newFragment = new DialogFragment();
                newFragment.show(getFragmentManager(), "dialog");
         break;       
        }
    }
}
Теги:

1 ответ

5
Лучший ответ

Для отправки данных из DialogFragment в Activity вы можете использовать класс Handler.

Основное действие, из которого вызывается диалог TimePicker:

    public class MainActivity extends Activity{ 

    Handler h = new Handler(){
        @Override
        public void handleMessage(Message msg){
            Button button = (Button) findViewById(R.id.btn);
            button.setText(msg.getData().getString("btn"));
        }
    };

    @Override
    public void onCreate(Bundle bundle){
        super.onCreate(bundle);
        setContentView(R.layout.main);
    }

    public void btnClicked(View v){    
        TimepickerFragment dialog = new TimepickerFragment(h);
        dialog.show(getFragmentManager(), "timepickerdialog");
    }
}

Диалог TimePicker:

    public class TimepickerFragment extends DialogFragment{
    Handler h;
    public TimepickerFragment(Handler arg_h){
        h = arg_h;      
    }       
    private TimePickerDialog.OnTimeSetListener callback = new TimePickerDialog.OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {         
            Message msg = new Message();
            Bundle data = new Bundle();
            data.putString("btn", "Selected Time - " + hourOfDay + ":" + minute);
            msg.setData(data);
            h.sendMessage(msg);             
        }
    };

    public Dialog onCreateDialog(Bundle bundle){
        int hourOfDay = 10;
        int minute = 10;
        boolean is24HourView = false;
        TimePickerDialog tpdialog = new TimePickerDialog(getActivity(), callback, hourOfDay, minute, is24HourView); 
        return tpdialog;
    }
}

Примечание. Вышеприведенный код тестируется на уровне API 14

  • 0
    Ааа ... Наконец-то хорошее решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню