Добрый день, я буду первым, кто признается, у меня нет опыта использования фрагментов вообще и просто обучения, поэтому, пожалуйста, несите меня. Как говорится в названии, я пытаюсь установить результат из 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;
}
}
}
Для отправки данных из 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