Mos*_*k L 13 java android deprecated deprecation-warning
我目前正在构建一个针对API 23的应用,最低API为19.
在API 23中,android.widget.TimePicker组件的一些方法已被替换.
例如:
TimePicker.getCurrentHour();
Run Code Online (Sandbox Code Playgroud)
被替换为:
TimePicker.getHour();
Run Code Online (Sandbox Code Playgroud)
现在,在我的应用程序中使用TimePicker时,我应该使用以下if语句检查设备是否使用API 22或更高版本:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
TimePicker.getHour();
else
TimePicker.getCurrentHour();
Run Code Online (Sandbox Code Playgroud)
我所做的是扩展TimePicker类并实现这样的弃用方法:
public class TimePicker extends android.widget.TimePicker {
public TimePicker(Context context) {
super(context);
}
public void setCurrentHour(int hour) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
super.setHour(hour);
else
super.setCurrentHour(hour);
}
public void setCurrentMinute(int minute) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
super.setMinute(minute);
else
super.setCurrentMinute(minute);
}
public int getCurrentHour() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return super.getHour();
else
return super.getCurrentHour();
}
public int getCurrentMinute() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return super.getMinute();
else
return super.getCurrentMinute();
}
}
Run Code Online (Sandbox Code Playgroud)
所以使用这个类的用户不会影响方法的更改(他应该只在他的实现中替换TimePicker类的导入).
这样做是否正确?还是有更好的解决方案?
谢谢
就我从显示的部分中读到的而言,您的表现方式是一种很好的做法。
但是,正如我目前所见,最佳实践是对您打算发布的每个类进行不同的细分,并在安装过程中堆叠程序。
这基本上意味着if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)在班级中名列前茅。
如果您的项目打算使用更多版本,我建议这样做:
public class Example extends moreExamples implements additionalExamples{
switch(Build.VERSION.SDK_INT){
case Build.VERSION_CODES.M:
codeVersionM();
break;
case Build.VERSION_CODES.L:
codeVersionL();
break;
case Build.VERSION_CODES.K:
codeVersionK();
break;
default:
errorNoBuildImplemented();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3369 次 |
| 最近记录: |