2017-01-16 24 views
1

我正在構建一個android應用程序,並且面臨DatePicker的問題。 我的實現(我想要的方式)如下: A GridView(帶圖像)和所選項目開始一個新的意圖。 關於特定項目,我首先要啓動DatePickerDatePicker選擇,啓動新的意圖。問題在於,或者DatePicker將在其後推出,或者根本不會啓動。 如果任何人都可以提供幫助,我會很感激(關於代碼,或者如果他能爲我提供另一個更合適的實現解決方案)。Android:GridView中的Datepicker

所以我有這樣的代碼onCreate()內:

gridview.setAdapter(myAdapter); 
     calendarDate = Calendar.getInstance(); 
     caseCalendar = Calendar.getInstance(); 
     gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       if(position == 7){ 
        onCustomDatePicker(); 
        if(caseCalendar.get(Calendar.DAY_OF_YEAR) < calendarDate.get(Calendar.DAY_OF_YEAR)){ 
         Toast.makeText(getBaseContext(), "Πρέπει να επιλέξεις μεταγενέστερη ημερομηνία", Toast.LENGTH_SHORT).show(); 
         onCustomDatePicker(); 
        } 
       } 
       else{ 
        caseCalendar = calendarDate; 
       } 
       Intent intent = new Intent(getBaseContext(), Customize.class); 
       ViewHolder holder = (ViewHolder) v.getTag(); 
       DateWithImage temp = (DateWithImage) holder.image.getTag(); 
       intent.putExtra("image",temp.getImageID()); 
       intent.putExtra("option",position); 
       intent.putExtra("info",temp.getInfo()); 
       intent.putExtra("calendar", calendarDate); 
       intent.putExtra("caseCalendar", caseCalendar); 
       startActivity(intent); 
       Toast.makeText(getBaseContext(), "" + position, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

與此代碼爲DatePicker

private void onCustomDatePicker(){ 
    new DatePickerDialog(this, d, caseCalendar.get(Calendar.YEAR),caseCalendar.get(Calendar.MONTH),caseCalendar.get(Calendar.DAY_OF_MONTH)).show(); 
} 

DatePickerDialog.OnDateSetListener d = new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     caseCalendar.set(Calendar.YEAR, year); 
     caseCalendar.set(Calendar.MONTH, monthOfYear); 
     caseCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
    } 
}; 

我想設定新的日期到caseCalendar和比較它calendarDate(保存當前日期)。

回答

0

您每次打算點擊圖像時都打電話給startActivity(intent);。對於具體的項目,你需要這樣寫:

if(position == 7){ 
        onCustomDatePicker(); 
        if(caseCalendar.get(Calendar.DAY_OF_YEAR) < calendarDate.get(Calendar.DAY_OF_YEAR)){ 
         Toast.makeText(getBaseContext(), "Πρέπει να επιλέξεις μεταγενέστερη ημερομηνία", Toast.LENGTH_SHORT).show(); 
         onCustomDatePicker(); 
        } 
       } 
       else{ 
        caseCalendar = calendarDate; 
Intent intent = new Intent(getBaseContext(), Customize.class); 
       ViewHolder holder = (ViewHolder) v.getTag(); 
       DateWithImage temp = (DateWithImage) holder.image.getTag(); 
       intent.putExtra("image",temp.getImageID()); 
       intent.putExtra("option",position); 
       intent.putExtra("info",temp.getInfo()); 
       intent.putExtra("calendar", calendarDate); 
       intent.putExtra("caseCalendar", caseCalendar); 
       startActivity(intent); 
       Toast.makeText(getBaseContext(), "" + position,  Toast.LENGTH_SHORT).show(); 
       } 

首先,你需要調用僅日期選擇器對話框,然後在設定日期,你可以開始新的活動。現在你只在圖片點擊開始活動。

+0

感謝您的答覆,但它似乎沒有工作,雖然你實現給了我一些很好的提示。不幸的是,或者我會堅持使用日期選擇器,否則在我選擇之前會彈出新的意圖。 –

0

好了,我終於找到了解決辦法,以防萬一有人遇到這個問題(一個日期選擇器,一個gridview.SetOnClickListener內實現) -

要honnest,雖然它是工作,我將不勝感激,如果有人可以告訴我,如果這是一個良好的編程實踐....:

我已經使用兩個日曆(一個爲當天和一個選定的 - 顯然,如果我用getInstance()初始化caseCalendar它獲得與calendarDate相同的值):

calendarDate = Calendar.getInstance(); 
     caseCalendar = new GregorianCalendar(calendarDate.get(Calendar.YEAR), calendarDate.get(Calendar.MONTH) ,calendarDate.get(Calendar.DAY_OF_MONTH)-1); 

的的onCreate()內:

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       final ViewHolder holder = (ViewHolder) v.getTag(); 
       final int mposition = position; 
       if(mposition == 7){//in my case the desired position to trigger the dayPicker 
        if(caseCalendar.compareTo(calendarDate)< 0){ 
         Toast.makeText(getBaseContext(), "", Toast.LENGTH_LONG).show(); 
         onCustomDatePicker(holder,mposition); 
        } 
       } 
       else{ 
        caseCalendar = calendarDate; 
        startNewActivity(holder,mposition); 
       } 
      } 
     }); 

在一個特定的選擇,我希望新的活動之前得到的日期選擇器,但在其他的選擇,我想馬上開始新的活動。所以,我用這兩種方法:

private void onCustomDatePicker(final ViewHolder holder, final int mposition){ 
     new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 
      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       caseCalendar.set(Calendar.YEAR, year); 
       caseCalendar.set(Calendar.MONTH, monthOfYear); 
       caseCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
       startNewActivity(holder, mposition); 
      } 
     }, caseCalendar.get(Calendar.YEAR),caseCalendar.get(Calendar.MONTH),caseCalendar.get(Calendar.DAY_OF_MONTH)).show(); 
    } 

    private void startNewActivity(final ViewHolder holder, final int mposition){ 
     Intent intent = new Intent(getBaseContext(), Customize.class); 
     DateWithImage temp = (DateWithImage) holder.image.getTag(); 
     intent.putExtra("image",temp.getImageID()); 
     intent.putExtra("option",mposition); 
     intent.putExtra("info",temp.getInfo()); 
     intent.putExtra("calendar", calendarDate); 
     intent.putExtra("caseCalendar", caseCalendar); 
     startActivity(intent); 
     Toast.makeText(getBaseContext(), "" + mposition, Toast.LENGTH_SHORT).show(); 
    }