1

如果我運行這個,不幸的是該應用程序已關閉。 但我嘗試了很多,我無法在文本字段中獲取日期。 showdialog存在錯誤, 它返回添加超級報警。 ​​Datepicker沒有運行?

package com.task.reminder; 

import java.util.Calendar; 
import android.*; 
import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 

@SuppressWarnings("unused") 
public class Add extends Activity 
{ 

    static final int DATE_ID = 0; 
    private int tMonth; 
    private int tYear; 
    private int tDay; 
    private EditText et2 =(EditText)findViewById(R.id.editText2); 
    private Button datebut=(Button)findViewById(R.id.button3); 
    /** Called when the activity is first created. */ 
    @Override 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add); 

     getdate(); 
    } 



     private void getdate() 
     { 
      datebut.setOnClickListener(new View.OnClickListener() { 


       @SuppressWarnings("deprecation") 
       @Override 
       public void onClick(View v) 
       { 
        showDialog(DATE_ID); 
       } 
      }); 

      final Calendar c = Calendar.getInstance(); 
      tYear = c.get(Calendar.YEAR); 
      tMonth = c.get(Calendar.MONTH); 
      tDay = c.get(Calendar.DAY_OF_MONTH); 
      displaydate(); 

     } 

     protected Dialog onCreateDialog(int id) 
     { 
       switch(id) 
       { 
       case DATE_ID: 
         return new DatePickerDialog(this, datePickerListener, 
           tYear, tMonth,tDay); 
       } 
       return null; 
     } 


     private DatePickerDialog.OnDateSetListener datePickerListener= 
       new DatePickerDialog.OnDateSetListener() 
     { 

        @Override 
        public void onDateSet(DatePicker view, int year, int monthOfYear, 
          int dayOfMonth) 
        { 
         tYear=year; 
         tMonth=monthOfYear; 
         tDay=dayOfMonth; 
         displaydate(); 
        } 
     }; 


     private void displaydate() 
     { 


      et2.setText(new StringBuilder().append(tMonth+1).append("-").append(tDay).append("-").append(tYear).append(" ")); 


     }  


} 

我需要一些幫助,感謝烏拉圭回合的貢獻。

回答

0

您正在嘗試查找沒有爲活動設置佈局的View,因此更多全部findViewById行之後的setContentView(R.layout.activity_add);onCreate(Bundle savedInstanceState)活動的方法。更改您的代碼爲:

public class Add extends Activity 
{ 

    static final int DATE_ID = 0; 
    private int tMonth; 
    private int tYear; 
    private int tDay; 
    EditText et2 ; 
    Button datebut; 
    /** Called when the activity is first created. */ 
    @Override 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add); 
     et2 =(EditText)findViewById(R.id.editText2); 
     datebut=(Button)findViewById(R.id.button3); 
      // your code here.... 
+0

改變的是,獲得了同樣的問題, – AndRaGhu

+0

在logcat中,11月12日至四日後:02:05.035:d/gralloc_goldfish(721):無仿真器檢測到GPU仿真。 – AndRaGhu

+0

@AndRaGhu:這是另一個問題,不編程有關看到這篇文章http://stackoverflow.com/questions/9323371/emulator-without-gpu-emulation-detected –

1

嘗試下面的例子中它的工作原理

CalendarActivity的.java

public class CalendarActivity extends Activity 
{ 
private EditText Calctrl; 
static final int DATE_DIALOG_ID = 0; 
final Calendar c = Calendar.getInstance(); 
private int mYear, mMonth, mDay; 
private String sdate; 
private String[] arrayMonth = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Calctrl = (EditText) findViewById(R.id.datepicker); 
    mYear = c.get(Calendar.YEAR); 
    mMonth = c.get(Calendar.MONTH); 
    mDay = c.get(Calendar.DAY_OF_MONTH); 
    sdate = currentDate(mYear, mMonth, mDay); 
    Calctrl.setText(sdate); 

    Calctrl.setOnTouchListener(new OnTouchListener() 
    { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
    showDialog(DATE_DIALOG_ID); 
    return true; 
    } 
    }); 
} 

@Override 
protected Dialog onCreateDialog(int id) 
{ 
    switch (id) 
    { 
    case DATE_DIALOG_ID: 
    return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,mDay); 
    } 
    return null; 
} 

@Override 
protected void onPrepareDialog(int id, Dialog dialog) 
{ 
    switch (id) 
    { 
    case DATE_DIALOG_ID: 
    ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay); 
    break; 
    } 
} 

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() 
{ 
    public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) 
    { 
    mYear = year; 
    mMonth = monthOfYear; 
    mDay = dayOfMonth; 
    String sdate = currentDate(mYear, mMonth, mDay); 
    Calctrl.setText(sdate); 
    } 
}; 

private static String LPad(String schar, String spad, int len) 
{ 
    String sret = schar; 
    for (int i = sret.length(); i < len; i++) 
    { 
    sret = spad + sret; 
    } 
    return new String(sret); 
} 

private String currentDate(int year, int month, int day) 
{ 
    String sdate = arrayMonth[month] + " " + LPad(day + "", "0", 2) + ", "+ year; 
    return sdate; 
} 
} 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/app_background" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/datepicker" 
     android:layout_width="150dp" 
     android:layout_height="wrap_content" 
     android:editable="false" 
     android:inputType="none" /> 

</LinearLayout> 

來源here

+0

謝謝你..我爲我工作.. – kyogs

0

下面是我的代碼,我已經做了在文本視圖中顯示日期點擊按鈕。 ..點擊按鈕日期選擇器會彈出。你只需選擇日期,它會將該日期設置爲 到相應的文本視圖。 希望這將有助於..

TextView starttext1; 
Button startdatecustom; 
DateFormat fmtDateAndTime = DateFormat.getDateInstance(); 

private int year; 
private int month; 
private int day; 
Calendar myCalendar = Calendar.getInstance(); 
static final int DATE_DIALOG_ID = 999; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 
starttext1 = (TextView) findViewById(R.id.startdateedittext1); 

startdatecustom = (Button) findViewById(R.id.btnstdateactcutom); 

startdatecustom.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 



      new DatePickerDialog(MainActivity.this, d, myCalendar 
        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), 
        myCalendar.get(Calendar.DAY_OF_MONTH)).show(); 

     } 
    }); 

} 

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

private void updateLabel() { 
    starttext1.setText(fmtDateAndTime.format(myCalendar.getTime())); 
} 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     // set date picker as current date 
     return new DatePickerDialog(this, datePickerListener, year, month, 
       day); 
    } 
    return null; 
} 

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 

    // when dialog box is closed, below method will be called. 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     year = selectedYear; 
     month = selectedMonth; 
     day = selectedDay; 

    } 
};