等待TimePickerFragment返回时间

时间:2018-12-07 16:15:07

标签: java android timepicker

JAVA和Android编码的新手,并尝试了我的第一个实际项目。

我不明白如何让处理程序等到timekeeperdialog返回值。

在我的主要活动中,我创建了变量的getter和setter方法(第一次这样做):

    private int pickhour;
    private int pickminute;

    public MainActivity(){

        pickhour = 0;
        pickminute = 0;


    }



    public void setpickhour(int pickhour) {
        this.pickhour = pickhour;

    }

    public int getpickhour(){
        return this.pickhour;
    }

    public void setpickminute(int pickminute) {
        this.pickminute = pickminute;

    }

    public int getPickminute(int pickminute) {
        return this.pickminute;

    }

我以此调用对话框,然后期望处理暂停,直到TimePicker返回值为止,我有一个Toast来显示结果。时间选择器出现后,Toast便会触发。

DialogFragment newFragment = new TimePickerFragment();
        newFragment.show(getFragmentManager(),"TimePicker");

  Toast.makeText(getApplicationContext(), "Time Picker" + String.valueOf(pickhour) + ":" + String.valueOf(pickminute), Toast.LENGTH_LONG).show();

我的片段看起来像这样:

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener{

private MainActivity ma = new MainActivity();

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

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

//onTimeSet() callback method
public void onTimeSet(TimePicker view, int hourOfDay, int minute){
    //Do something with the user chosen time
    //Get reference of host activity (XML Layout File) TextView widget

    ma.setpickhour(hourOfDay);
    ma.setpickminute(minute);





}

}

我尝试遍历ontimeset方法设置的布尔值以强制等待返回值,但是我的应用程序刚刚挂起。

我缺少什么基本概念?我正在休假,所以花了一天半的时间来解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以尝试-

sockaddr_in addr;
SOCKET sock, client;

addr.sin_family = AF_INET;
addr.sin_port = 1818;
const char *svrIP = "127.0.0.1";
//addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
inet_pton(AF_INET, "127.0.0.1", (PVOID *)(&addr.sin_addr.S_un.S_addr));
if (iResult)
{
    printf("WSA startup failed");
    return 0;
}


sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (sock == INVALID_SOCKET)
{
    printf("Invalid socket");
    return 0;
}

iResult = connect(sock, (SOCKADDR*)&addr, sizeof(sockaddr_in));

如果仅将片段用于timePicker,则不需要该片段。

在这种情况下,您可以在MainActivity中尝试-

public class TimePickerFragment extends DialogFragment implements 
TimePickerDialog.OnTimeSetListener{

private MainActivity ma = new MainActivity();

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

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

//onTimeSet() callback method
public void onTimeSet(TimePicker view, int hourOfDay, int minute){
//Do something with the user chosen time
//Get reference of host activity (XML Layout File) TextView widget

ma.setpickhour(hourOfDay);
ma.setpickminute(minute);



Toast.makeText(getApplicationContext(), "Time Picker" + String.valueOf(pickhour) + ":" + String.valueOf(pickminute), Toast.LENGTH_LONG).show();

}

}

您的代码有效吗?因为您无法在TimePickerDialog构造函数中将“ this”作为第二个参数传递。