【1】关于重写的Class(这里通过Numberpciker作为事例)
public class RakurakuNumberPicker extends NumberPicker {//[1]继承想要重写的控件
//[2]必须完成其自身的构造函数(三个都写上最好)
public RakurakuNumberPicker(Context context) {
super(context);
}
public RakurakuNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RakurakuNumberPicker(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//[3]贴上你自己添加的方法or重写的方法
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
SettingMessageNotificationTimeActivity.getInstance()
.updateArrowGuidanceUI(true);
}
if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
SettingMessageNotificationTimeActivity.getInstance()
.updateArrowGuidanceUI(false);
}
return super.dispatchKeyEvent(event);
}
}
【2】调用处的方法
- XML文件的引用(注意姿势)
<com.android.mms.ui.RakurakuNumberPicker
android:id="@+id/notice_time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
- Class文件使用
//声明
private RakurakuNumberPicker mNoticeTimePicker;
//绑定
mNoticeTimePicker = (RakurakuNumberPicker)findViewById(R.id.notice_time_picker);
【3】彩蛋(重写的View调用调用处的方法)
- 小插曲,因为需要用到static方法,所以凡是涉及到的方法or成员都需要变成static的
这显然不能接受
最终比较好的实现方案
- Activity开放一个获得其对象的静态方法
protected static SettingMessageNotificationTimeActivity sMe;
public static SettingMessageNotificationTimeActivity getInstance() {
return sMe;
}
- 自定义的空间拿到Activity对象然后调用其方法
SettingMessageNotificationTimeActivity.getInstance().FunctionTest();