2016-08-17 82 views
0

我fragment.java是如何添加日期和時間從Edittext日期選擇器和timepicker?

public class myFragment1 extends Fragment { 
     private EditText ettime,etdate; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.create_event_step2, container, false); 
     toolbar = (Toolbar) view.findViewById(R.id.toolbar); 


     ettime = (EditText) view.findViewById(R.id.ettime); 
     etdate = (EditText) view.findViewById(R.id.etdate); 



     etdate.setOnClickListener(dateDialog()); 
     ettime.setOnClickListener(timeDialog()); 
     return view; 
} 


    private View.OnClickListener timeDialog() { 
     return new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final Dialog gameTypes = new Dialog(getActivity(), android.R.style.Theme_DeviceDefault_Dialog); 
       gameTypes.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       gameTypes.setContentView(R.layout.time_popup_layout); 
       gameTypes.show(); 
       TimePicker tmPk1= (TimePicker) gameTypes.findViewById(R.id.fromtimePicker); 
       tmPk1.setOnTimeChangedListener(timeChanged()); 
      // TimePicker tmPk2= (TimePicker) gameTypes.findViewById(R.id.totimePicker); 
      // tmPk2.setOnTimeChangedListener(timeChanged(tmPk2, "to")); 

      } 
     }; 
    } 


    private TimePicker.OnTimeChangedListener timeChanged() { 
     return new TimePicker.OnTimeChangedListener() { 
      @Override 
      public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
       String min=(String.valueOf(minute).length()==1? 
         "0"+String.valueOf(minute):String.valueOf(minute)); 
       step2.put("STime", hourOfDay + ":" + min); 
       ettime.setText(hourOfDay + ":" + min); 
       // if (fr.equals("from")) from=hourOfDay+""+minute; 
       // if (fr.equals("to")) to=hourOfDay+""+minute; 

      } 
     }; 
    } 

    private View.OnClickListener dateDialog() { 
    return new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Dialog gameTypes = new Dialog(getActivity(),android.R.style.Theme_DeviceDefault_Dialog); 
      gameTypes.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      gameTypes.setContentView(R.layout.date_popup_layout); 
      gameTypes.show(); 
      DatePicker dpk1= (DatePicker) gameTypes.findViewById(R.id.datepk1); 
      // dpk1.updateDate(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH); 
      Calendar today = Calendar.getInstance(); 
      dpk1.init(
        today.get(Calendar.YEAR), 
        today.get(Calendar.MONTH), 
        today.get(Calendar.DAY_OF_MONTH), 
        new DatePicker.OnDateChangedListener() { 
         @Override 
         public void onDateChanged(DatePicker view, 
                int year, int monthOfYear, int dayOfMonth) { 
          step2.put("GmDate", year + "-" + (monthOfYear + 1) + "-" + dayOfMonth); 
          etdate.setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth); 
         } 
        }); 

     } 
    }; 
    } 

我想要的是,當我在編輯文本

點擊,如果有在時間編輯文本沒有數據..

時間選擇器顯示時間現在

其他 時間選擇器顯示時間是在編輯文本

,如果有在日編輯文本沒有數據..

的日期選擇器顯示的日期現在

其他 日期選取器顯示的日期是在編輯文本

回答

0

有一個自定義DialogBu​​ilder因爲你的代碼中有多個對話框用法。

一旦你點擊timedatepicker edittext發送null或edittext內容到對話框。

如果數據是空放映current timetoday's date一個選擇器, 否則顯示預定義的數據選擇器(傳遞到對話框調用時)。

0

這個訣竅是禁用你的EditText s,以便鍵盤在獲得焦點時不會打開。你可能也想禁用他們的焦點。

您可以在XML做到這一點像這樣

<EditText 
    ... 
    android:enabled="false" 
    android:focusable="false" 
    /> 

或者在代碼中,你有一個參考

ettime.setEnabled(false); 
ettime.setFocusable(false); 

後,您需要一點點邏輯添加到您的OnClickListeners設置時間爲當前時間,如果沒有時間已經進入。例如:

EditText editText = (EditText) v; 
if (editText.getText().toString().isEmpty()) { 
    // set current time 
} else { 
    // open dialog 
} 

要格式化從DateCalendar目的是人類可讀形式的日期或時間,嘗試使用SimpleDateFormat

對於日期和時間選擇器,我會推薦this library,它非常簡單,可定製,與許多操作系統版本兼容,看起來不錯。