DatePicker的Android onDateSet方法不会在另一个打开的对话框

时间:2017-02-14 11:10:04

标签: android datepicker android-datepicker

我有一个带有textView的对话窗口,其中显示了datePicker选择的日期。我在这个对话框上也有一个按钮,它打开一个datePicker(片段)并让我选择一个日期。但是,当我按下确定时,日期textView不会在对话框窗口中设置。但是,如果我调试它肯定有传递日期的信息,问题是它没有在对话框中设置。

onDateSet的代码如下:

@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

    LayoutInflater inflater = this.getLayoutInflater();
    View view2 = inflater.inflate(R.layout.item_edit, null);

    TextView txtDate = (TextView) view2.findViewById(R.id.txtDate);
    txtDate.setText(year + "/" + month + "/" + dayOfMonth);
}

此代码来自主要活动页面。

当我调试它时,年,月和日都具有正确的值。但是txtDate.setText没有做任何事情。

1 个答案:

答案 0 :(得分:0)

@RedZerg我们真的迟到了这个派对首先我们不使用Fragment来存储我的DatePicker,我们将它放在自己的XML文件中,其中根布局是一个垂直的LinearLayout,这样它不会混乱我们的活动屏幕从这段代码中挑选将把选定的DATE'发送到另一个Activity我的目标是用一个按钮选择两个日期并发送日期以在DB上进行BETWEEN SQL搜索我们使用样式来管理样式

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/color_lightGray">
    <!--the background sets the color of the calender  -->

    <DatePicker
    android:id="@+id/datePicker"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:calendarViewShown="true"
    android:headerBackground="@color/color_Purple"
    android:theme="@style/DatePickerTheme" />
   </LinearLayout>

    <style name="DatePickerTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="android:selectableItemBackgroundBorderless">@color/color_Purple</item>
    <item name="android:textColorPrimary">@color/color_Black</item>
</style>

    public void onMake(View view){

    // custom dialog
    final Dialog dialog = new Dialog(PageOneActivity.this);
    dialog.setContentView(R.layout.datepickerview);
    // the layout datepickerview is a XML file
    dialog.setTitle("");

    DatePicker picker = dialog.findViewById(R.id.datePicker);
    // the id datePicker is a Date Picker widget in its own XML file
    // as referenced above you need this to manage custom styling
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    //picker.updateDate(2017, 10, 13);//year month day
    picker.updateDate(mYear, mMonth, mDay);// Keeps Calendar initial view what ever today is!

    //Date today = Calendar.getInstance().getTime();
    //SimpleDateFormat formatter = new SimpleDateFormat("MM"+"-"+"dd"+"-"+"yyyy");
    //String folderName = formatter.format(today);

    System.out.println("Month " + mMonth+1);

    picker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {
    //picker.init(Integer.valueOf(mMonth),Integer.valueOf(mDay),Integer.valueOf(mYear), new DatePicker.OnDateChangedListener() {
        @Override
        public void onDateChanged(DatePicker picker, int year, int monthOfYear, int dayOfMonth) {

            if (txtDateOne.getText().toString().isEmpty()) {
                System.out.println("I am Not Empty");
                txtDateOne.setText((monthOfYear+1) + "-" + dayOfMonth + "-" + year);
                etFirstDate.setText(String.valueOf(monthOfYear+1 ) + String.valueOf(dayOfMonth) + String.valueOf(year));
                v1 = Long.valueOf(etFirstDate.getText().toString());
                etFirstDate.setText(String.valueOf(v1));
                //got1 = mDay;
                dialog.dismiss();

            } else {

                txtDateTwo.setText((monthOfYear+1 ) + "-" + dayOfMonth + "-" + year);
                etSecondDate.setText(String.valueOf(monthOfYear+1) + String.valueOf(dayOfMonth) + String.valueOf(year));
                v2 = Long.valueOf(etSecondDate.getText().toString());
                //v2 = Long.valueOf(txtDateTwo.getText().toString());
                etSecondDate.setText(String.valueOf(v2));
                dialog.dismiss();


                if (etSecondDate.getText().toString().length() > 0) {
                    if (v2 >= v1) {
                        btnDatePicker.setTextColor(getColor(R.color.color_Purple));
                        btnDatePicker.setEnabled(false);
                        sbstring = "First Date < or = Second Date";
                        Toast.makeText( PageOneActivity.this, "First Date < or = Second Date", Toast.LENGTH_LONG ).show();
                        //showSB();
                        int r = (int) (v2-v1);

                        //txtDateTwo.setText(String.valueOf(r));
                    } else {
                        btnDatePicker.setTextColor(getColor(R.color.color_deepBlue));
                        btnDatePicker.setEnabled(false);
                        sbstring = "First Date > or = Second Date";
                        Toast.makeText( PageOneActivity.this, "First Date > or = Second Date", Toast.LENGTH_LONG ).show();

                        //showSB();
                        //int r = (int) (v1-v2);
                    }
                }
            }
            //mDay=dayOfMonth;
            //mMonth=(month);
            //mYear=year;
        }
    });

    dialog.show();
}

    public void onSend(View view){
    if(etFirstDate.getText().toString().isEmpty() || etSecondDate.getText().toString().isEmpty()){
        Toast.makeText( PageOneActivity.this, "You Need Both Dates\n       PICK A DATE", Toast.LENGTH_LONG ).show();
        return;
    }else {
        Intent send = new Intent(PageOneActivity.this,PageTwoActivity.class);
        send.putExtra("FROM_DATE",v1);
        send.putExtra("TO_DATE",v2);
        startActivity(send);
    }
}