我的 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;
}
};
View 可以是:
编辑文本
AutoCompleteTextView
- 一些其他 View 元素
我已经调试了代码,从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;
}
};
最佳答案
是的。您可以将子对象转换为父对象,因为每个子对象都是父对象。这就是 OOP 的美妙之处。
关于java - 将 Child 转换为 Parent 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036021/