2017-07-20 43 views
0

我在Android開發(第二版)上使用Big Nerd Ranch指南。這本書目前進展順利,只是我注意到了他們代碼中的一個錯誤,我不知道如何解決它。我的CrimeFragment類中的onActivityResult方法檢索用戶選擇的日期並使用該日期更新mCrime,並更新按鈕上的文本以顯示最新的日期。這隻能在onActivityResult方法內完成,但本書希望您將行mDateButton.setText(mCrime.getDate().toString());粘貼到單獨的活動中,以便在別處調用。那麼,所做的只是恢復原來的日期而不是用戶選擇的日期。如何從DatePicker中檢索用戶選擇的日期?

所以這是代碼,其中用戶從DatePicker的對話框中挑選他/她的約會:

return new AlertDialog.Builder(getActivity()) 
       .setView(v) 
       .setTitle(R.string.date_picker_title) 
       .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         int year = mDatePicker.getYear(); 
         int month = mDatePicker.getMonth(); 
         int day = mDatePicker.getDayOfMonth(); 

         Date date = new GregorianCalendar(year, month, day).getTime(); 
         sendResult(Activity.RESULT_OK, date); 
        } 
       }) 
       .setNegativeButton(R.string.cancel, null) 
       .create(); 

和代碼發送由onActivityResult回升的結果,這裏是代碼:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode != Activity.RESULT_OK){ 
      return; 
     } 
     if(requestCode == REQUEST_DATE){ 
      Date date = (Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE); 
      mCrime.setDate(date); 
      updateDate(); 
      /* 
      * The code mDateButton.setText(mCrime.getDate().toString()) only works here!!! 
      * */ 
     } 
    } 

    private void updateDate() { 
     mDateButton.setText(mCrime.getDate().toString()); 
    } 

該行代碼僅適用於該方法,但我被告知將其放入名爲updateDate()的新方法中,並在需要的地方調用它。它不起作用。非常沮喪的這個問題。對於這樣一本暢銷書來說,這似乎是一個非常幼稚的錯誤。

謝謝。

回答

1

請從下面的這位用戶中挑選DatePicker的日期,我希望這會對你有所幫助。

public void pickdate(View view){ 
    final Calendar c = Calendar.getInstance(); 
    int mYear = c.get(Calendar.YEAR); 
    int mMonth = c.get(Calendar.MONTH); 
    int mDay = c.get(Calendar.DAY_OF_MONTH); 

    final Calendar c1 = Calendar.getInstance(); 
    DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int month, int day) { 

      c1.set(Calendar.YEAR, year); 
      c1.set(Calendar.MONTH, month); 
      c1.set(Calendar.DAY_OF_MONTH, day); 

      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
      datebutton.setText(dateFormat.format(c1.getTime())); //to set date on button in format yyyy-MM-dd 
      String date = datebtn.getText().toString();//to get date to string from button 
      //OR use below to assign directly 

      /* 
      String date = dateFormat.format(c1.getTime()); 
      */ 

      /* DateFormat datefmt= DateFormat.getDateInstance(DateFormat.MEDIUM); // to get date format in Feb 31,3017 
       button.setText(datefmt.format(c1.getTime())); 
       string = button.getText().toString();*/ 

     } 
    }, mYear, mMonth, mDay); 
    datePickerDialog.show(); 
    long now = System.currentTimeMillis() - 1000; 
    datePickerDialog.getDatePicker().setMinDate(now);// To Disable previous dates and enables from present date in datepicker 
    datePickerDialog.getDatePicker().setMaxDate(now+31536000000L);// for 365 days 1000*60*60*24*365 mill_sec*sec*min*hours*days 
} 

一切順利,

相關問題