【问题标题】:Datepicker dialog cannot be displayed in android日期选择器对话框无法在android中显示
【发布时间】:2015-11-28 07:17:20
【问题描述】:

我正在尝试使用微调器小部件获取日期。日期显示在 TOAST 消息上,但是当我单击微调器日期选择器对话框时不会打开。找不到错误。

这是我的代码 sn-p。

主要活动。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_apply_leave);

    leaveApplyFromDate = (Spinner)findViewById(R.id.leaveApplyFromDate);

    calendar = Calendar.getInstance();
    year = calendar.get(Calendar.YEAR);

    month = calendar.get(Calendar.MONTH);
    day = calendar.get(Calendar.DAY_OF_MONTH);
    showDate(year, month+1, day);


    leaveApplyFromDate.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(getBaseContext(), leaveApplyFromDate.getSelectedItem().toString(),
                    Toast.LENGTH_SHORT).show();
            setDate(view);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });


}

@Override
protected Dialog onCreateDialog(int id) {
    // TODO Auto-generated method stub
    if (id == 999) {
        return new DatePickerDialog(this, myDateListener, year, month, day);
    }
    return null;
}
@SuppressWarnings("deprecation")
public void setDate(View view) {
    showDialog(999);
    Toast.makeText(getApplicationContext(), "ca", Toast.LENGTH_SHORT)
            .show();
}

private DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
        // arg1 = year
        // arg2 = month
        // arg3 = day
        showDate(arg1, arg2+1, arg3);
    }
};

private void showDate(int year, int month, int day) {
   // leaveApplyFromDate.setText(new StringBuilder().append(day).append("/")
       //     .append(month).append("/").append(year));
    Toast.makeText(getBaseContext(), new StringBuilder().append(day).append("/")
                .append(month).append("/").append(year),
            Toast.LENGTH_SHORT).show();
}

这是我的 xml 布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.hrm.staff.ApplyLeave">

            <Spinner
            android:id="@+id/leaveApplyFromDate"
            android:layout_height="@dimen/spinner_height"
            android:layout_weight="0.65"
            android:background="@color/spinner_bg_start"
            android:ems="10" />


</RelativeLayout>

【问题讨论】:

  • 为什么布局中的微调器没有宽度?
  • @OrkunKoçyiğit:因为我已将其放入表格行并为其设置了权重,如您所见。
  • 如果微调器不为空,您的代码对我有效
  • 对不起,我没有得到你。这是什么意思..微调器不是空的..?
  • 我添加了数字从 1 到 10 的简单适配器,如果我选择某个数字,它就可以工作。

标签: android datepicker


【解决方案1】:

您应该在活动中的某处调用 showDialog(999)

【讨论】:

  • 它在 setDate(view) 函数中调用。
  • 点击微调器上的项目时是否显示吐司?
  • 它在开始时显示,但当我单击微调器时没有任何反应。
【解决方案2】:

好的。现在我得到了答案。我已经更改了一些代码和 xml 以使其正常工作。希望这对其他人也有帮助。我在这里发布有效的代码

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_apply_leave);

leaveApplyFromDate = (Spinner)findViewById(R.id.leaveApplyFromDate);

calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);

month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
showDate(year, month+1, day);

 setDate(); // calling this function to fetch the date before it is clicked

 /* applying onlicklistener to textview of the date to open the date dialog box */ 
 leaveApplyFromDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setDateDialog(); // calling this function to display date dialog box

        }

    });
leaveApplyFromDate.setText(fromDate); // setting date for textview on loading the app

}

@Override
protected Dialog onCreateDialog(int id) {
    // TODO Auto-generated method stub
    if (id == 999) {
        return new DatePickerDialog(ApplyLeave.this, myDateListener, year, month, day);
    }
    return null;
}

@SuppressWarnings("deprecation")
public void setDate() {


}

@SuppressWarnings("deprecation")
public void setDateDialog() {
    showDialog(999);

}

private DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
        // arg1 = year
        // arg2 = month
        // arg3 = day
        showDate(arg1, arg2 + 1, arg3);
        leaveApplyFromDate.setText(fromDate); // setting date for textview after selecting it from date widget.
    }
};

private void showDate(int year, int month, int day) {

    StringBuilder date = new StringBuilder().append(day).append("/")
            .append(month).append("/").append(year);
    fromDate = date.toString();

}

这是我的 Xml 布局。

 <TextView
            android:id="@+id/leaveApplyFromDate"
            android:layout_height="wrap_content"
            android:layout_weight="0.65"
            android:background="@drawable/bg_file"
            android:textSize="@dimen/fontsize" />

希望这可能对某人有所帮助。 一切顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多