2012-03-25 66 views
2

我试图让波纹管简单DatePickerDialog工作代码可以在Android documentationDatePickerDialog



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.TextView; 

import java.util.Calendar; 

public class DatePickerDialogExample extends Activity { 
    private TextView mDateDisplay; 
    private Button mPickDate; 
    private int mYear; 
    private int mMonth; 
    private int mDay; 

    static final int DATE_DIALOG_ID = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mDateDisplay = (TextView) findViewById(R.id.dateDisplay); 
     mPickDate = (Button) findViewById(R.id.pickDate); 

     mPickDate.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       showDialog(DATE_DIALOG_ID); 
      } 
     }); 

     final Calendar c = Calendar.getInstance(); 
     mYear = c.get(Calendar.YEAR); 
     mMonth = c.get(Calendar.MONTH); 
     mDay = c.get(Calendar.DAY_OF_MONTH); 

     updateDisplay(); 
    } 

    private void updateDisplay() { 
     mDateDisplay.setText(
       new StringBuilder() 
         .append(mMonth + 1).append("-") 
         .append(mDay).append("-") 
         .append(mYear).append(" ")); 
    } 

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

       public void onDateSet(DatePicker view, int year, 
             int monthOfYear, int dayOfMonth) { 
        mYear = year; 
        mMonth = monthOfYear; 
        mDay = dayOfMonth; 
        updateDisplay(); 
       } 
      }; 

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

}

找到不过我遇到奇怪的错误

02-09 15:37:26.491: ERROR/AndroidRuntime(10174): FATAL EXCEPTION: main 
     android.view.InflateException: Binary XML file line #48: Error inflating class android.widget.ImageView 
     at android.view.LayoutInflater.createView(LayoutInflater.java:518) 
     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 
     at com.android.internal.app.AlertController.installContent(AlertController.java:205) 
     at android.app.AlertDialog.onCreate(AlertDialog.java:251) 
     at android.app.Dialog.dispatchOnCreate(Dialog.java:307) 
     at android.app.Activity.createDialog(Activity.java:886) 
     at android.app.Activity.showDialog(Activity.java:2557) 
     at android.app.Activity.showDialog(Activity.java:2524) 
     at uk.co.peterscrorner.DatePickerDialogExample$1.onClick(DatePickerDialogExample.java:33) 
     at android.view.View.performClick(View.java:2485) 
     at android.view.View$PerformClick.run(View.java:9080) 
     at android.os.Handler.handleCallback(Handler.java:587) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:123) 
     at android.app.ActivityThread.main(ActivityThread.java:3683) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.reflect.InvocationTargetException 
     at java.lang.reflect.Constructor.constructNative(Native Method) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:415) 
     at android.view.LayoutInflater.createView(LayoutInflater.java:505) 
     ... 27 more 
     Caused by: android.content.res.Resources$NotFoundException: File res/drawable-mdpi/ic_dialog_info.png from drawable resource ID #0x108009b 
     at android.content.res.Resources.loadDrawable(Resources.java:1714) 
     at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
     at android.widget.ImageView.(ImageView.java:118) 
     at android.widget.ImageView.(ImageView.java:108) 
     ... 30 more 
     Caused by: java.io.FileNotFoundException: res/drawable-mdpi/ic_dialog_info.png 
     at android.content.res.AssetManager.openNonAssetNative(Native Method) 
     at android.content.res.AssetManager.openNonAsset(AssetManager.java:406) 
     at android.content.res.Resources.loadDrawable(Resources.java:1706) 
     ... 33 more 
+0

代码我觉得这很奇怪。以上代码在2.3.3版HTC Desire HD上运行良好,但在2.3.3版的模拟器中点击按钮时会失败 可能是本周ADK r17版本中引入了一些问题吗? – 2012-03-25 16:15:48

+0

清理项目,然后再试一次 – 207 2012-03-25 17:10:10

+0

由于我使用Maven安装程序 – 2012-03-26 10:25:17

回答

0

可以ü请试试这个:DatePickerDialog

+0

Jeniffer,所以在默认情况下在每个版本上完成,这并不是说我的代码无法工作。它在真正的设备上工作,它只是模拟器踢在错误之上。从那以后,我宁愿测试设备而不是模拟器 – 2012-05-29 08:27:47

-2

演示如何使用DatePickerDialog的简单示例:

Calendar c = Calendar.getInstance(); 

new DatePickerDialog(this, new OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     // Do something here 
    } 
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show(); 
8

在XML中添加一个TextView和一个Button

<TextView 
    android:id="@+id/searchText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="TextView" /> 

<Button 
    android:id="@+id/search" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Search" /> 

添加下面的Java文件

public class DatePickerDialogExample extends Activity { 

    TextView txtDate; 
    private int mYear, mMonth, mDay, mHour, mMinute; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     txtDate = (TextView) findViewById(R.id.searchText); 
     Button search = (Button) findViewById(R.id.search); 
     search.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // Process to get Current Date 
      final Calendar c = Calendar.getInstance(); 
      mYear = c.get(Calendar.YEAR); 
      mMonth = c.get(Calendar.MONTH); 
      mDay = c.get(Calendar.DAY_OF_MONTH); 

      // Launch Date Picker Dialog 
      DatePickerDialog dpd = new DatePickerDialog(PrayTimeActivity.this, 
        new DatePickerDialog.OnDateSetListener() { 

         @Override 
         public void onDateSet(DatePicker view, int year, 
           int monthOfYear, int dayOfMonth) { 
          // Display Selected date in textbox 
          txtDate.setText(dayOfMonth + "-" 
            + (monthOfYear + 1) + "-" + year); 

         } 
        }, mYear, mMonth, mDay); 
       dpd.show(); 
      } 
     }); 


    } 

} 
+0

现在这个DatePickerDialog'设置日期,即使你点击后退按钮时不应该发生什么。 – 2015-04-07 10:59:14