2011-07-11 91 views
1

我想创建一个自定义日期选择器按钮组件。按钮显示日期,点击时打开日期选择器对话框。我已经实现了使用Android开发文档/教程的这种方法,但是我的代码中有2个,我认为创建一个名为DateButton的自定义类可以更好地清理我的代码。所以,无论何时我需要类似的按钮,我都可以在XML中创建一个DateButton。不管怎么说,这是我第一次创建自定义视图,我需要一些帮助,每当我尝试我的自定义按钮添加到我的布局,我得到一个错误:自定义DatePicker按钮。 Android中的自定义组件

error! ClassNotFoundException: android.app.DatePickerDialog$OnDateSetListener 

这里就是我想要的按钮来看看(极简单)

enter image description here

,当它被点击它会弹出内置android的日期选择器对话框:

enter image description here

这里是我的这个自定义datebutton当前代码:

import android.app.DatePickerDialog; 
import android.app.DatePickerDialog.OnDateSetListener; 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DatePicker; 


public class DateButton extends Button implements OnClickListener, OnDateSetListener { 

    private static final int DATE_DIALOG_ID = 0; 
private int mYear; 
private int mMonth; 
private int mDay; 
private OnDateSetListener mDateSetListener; 

public DateButton(Context context) { 
    super(context); 
} 

public DateButton(Context arg0, AttributeSet arg1) { 
    super(arg0, arg1); 
} 

public DateButton(Context arg0, AttributeSet arg1, int arg2) { 
    super(arg0, arg1, arg2); 
} 

@Override 
public void onClick(View v) { 
    showDialog(DATE_DIALOG_ID); 
} 

private DatePickerDialog showDialog(int dateDialogId) { 
    return new DatePickerDialog(getContext(), 
      mDateSetListener, 
      mYear, mMonth, mDay); 
} 

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

private void updateDisplay() { 
    this.setText(
      new StringBuilder() 
      // Month is 0 based so add 1 
      .append(pad(mMonth + 1)).append("/") 
      .append(pad(mDay)).append("/") 
      .append(mYear).append(" ")); 
} 

//if single digit append "0" to the number 
private static String pad(int c) { 
    if (c >= 10) 
     return String.valueOf(c); 
    else 
     return "0" + String.valueOf(c); 
    } 
    } 

编辑:我仍然在运行陷入困境的人有一些类似的的例子? 感谢您的帮助!

回答

0

尝试改变showDialog方法:

private showDialog() { 
     DatePickerDialog dialog = new DatePickerDialog(getContext(), 
      this, mYear, mMonth, mDay); 
     dialog.show(); 
    } 
} 

还添加了mYear, mMonth, mDay初始化代码。

+0

我会在onClick中调用什么? –

+0

@IZI_Shadow_IZI对于以前的代码抱歉,我对'Activity'感到困惑。检查新的。 – jamapag

+0

与showDialog方法相同的错误消息。仍然没有找到classNotFound –