我有一个使用NumberPicker
s 的应用程序。由于该应用程序支持旧版本的 Android,NumberPicker
还没有可用的小部件,因此我必须使用外部库。
在我的 XML 布局numberpicker_dialog.xml
中,我定义NumberPicker
如下:
<net.simonvt.numberpicker.NumberPicker
android:id="@+id/interval_picker_1"
... />
然后在我的活动代码中,我有:
import net.simonvt.numberpicker.NumberPicker;
private View intervalPickerDialogBody;
private NumberPicker intervalPicker1;
private android.widget.NumberPicker api11_intervalPicker1;
protected void onCreate(Bundle savedInstanceState) {
intervalPickerDialogBody = getLayoutInflater()
.inflate(R.layout.numberpicker_dialog, null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// the casting in question happens here
api11_intervalPicker1 = (android.widget.NumberPicker)
intervalPickerDialogBody.findViewById(R.id.interval_picker_1);
} else {
intervalPicker1 = (NumberPicker)
intervalPickerDialogBody.findViewById(R.id.interval_picker_1);
}
}
它有效,并且确实在 Honeycomb 和更新版本android.widget.NumberPicker
上使用,在旧版本net.simonvt.numberpicker.NumberPicker
上使用。
但是现在我正在写一篇关于使用这个应用程序的论文,我想知道:
- 当它们实际上是不同的类时,为什么
net.simonvt.numberpicker.NumberPicker
从 XML 布局进行转换?android.widget.NumberPicker
- 当XML 布局中的那个实际上是来自外部库的那个时,为什么只有这种转换才能使设备
android.widget.NumberPicker
在 Honeycomb 和更新版本上使用?NumberPicker
什么时候创建的实例android.widget.NumberPicker
?
在 Honeycomb 和更新版本上使用的事实android.widget.NumberPicker
得到了前面代码片段的第二行等于true
我的 4.0.3 手机上的事实的支持。
View tmp = intervalPickerDialogBody.findViewById(R.id.interval_picker_1);
tmp instanceof android.widget.NumberPicker // pseudocode
(谢谢你,朱尔斯,这比用箭头击中的证据要好得多。:))
如果有人想知道我是如何知道它android.widget.NumberPicker
实际上在 Honeycomb 和更新版本上使用的,那是因为它的net.simonvt.numberpicker.NumberPicker
上方和下方没有显示箭头,NumberPicker
因为它是从 4.2 向后移植的,其中箭头已被删除。当我在运行 4.0.3 的设备上尝试它时,箭头在那里,即使它应该显示net.simonvt.numberpicker.NumberPicker
,但它们不会。
我希望这个问题是可以理解的。感谢您详细说明该主题。