【发布时间】:2014-07-30 11:46:13
【问题描述】:
我的 Android 项目中有以下代码:
// The OnTouchListener is used so we are able to trigger the OnItemClickListener of the ListView,
// even though an EditText or AutoCompleteTextView is focused
private OnTouchListener itemOnTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v instanceof EditText){
EditText et = (EditText)v;
et.setFocusable(true);
et.setFocusableInTouchMode(true);
}
else{
MyHolder h = (MyHolder) v.getTag();
h.etAmount.setFocusable(false);
h.etAmount.setFocusableInTouchMode(false);
h.actvName.setFocusable(false);
h.actvName.setFocusableInTouchMode(false);
}
return false;
}
};
视图可以是:
EditTextAutoCompleteTextView- 其他一些视图元素
我已经调试了代码,因为AutoCompleteTextView's parent 是EditText,所以代码也进入了这个if。
所以我的问题是:在 AutoCompleteTextView 上使用EditText et = (EditText)v; 来设置其setFocusable 和setFocusableInTouchMode 是否安全?还是我应该改为以下?
// The OnTouchListener is used so we are able to trigger the OnItemClickListener of the ListView,
// even though an EditText or AutoCompleteTextView is focused
private OnTouchListener itemOnTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// WARNING: Leave this if above the if else for EditText,
// since AutoCompleteTextView has EditText as parent
if(v instanceof AutoCompleteTextView){
AutoCompleteTextView actv = (AutoCompleteTextView)v;
actv.setFocusable(true);
actv.setFocusableInTouchMode(true);
}
else if(v instanceof EditText){
EditText et = (EditText)v;
et.setFocusable(true);
et.setFocusableInTouchMode(true);
}
else{
MyHolder h = (MyHolder) v.getTag();
h.etAmount.setFocusable(false);
h.etAmount.setFocusableInTouchMode(false);
h.actvName.setFocusable(false);
h.actvName.setFocusableInTouchMode(false);
}
return false;
}
};
【问题讨论】:
-
没关系。这就是多态的用途。
标签: java android casting parent-child instanceof