我正在尝试在EditText
上实现OnFocusChangeListener
。问题是我遇到了这个错误
class"设施屏幕"必须被声明为抽象或实施 抽象方法" FocusChange(视图,布尔值(" 'Focuschangelistener'
即使方法onFocusChange
已在OnFocusChangeListener
中实现。
这是我的代码
public class FacilityScreen extends AppCompatActivity implements AdapterView.OnItemSelectedListener,View.OnFocusChangeListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facilty_screen);
EditText editText = (EditText) findViewById(R.id.enter_location);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasfocus) {
if(hasfocus){
//do something
}
}
});
}
}
我出了什么问题?
您需要 @Override
public void onFocusChange()
方法
editText.setOnFocusChangeListener(this)
检查此示例
public class FacilityScreen extends AppCompatActivity implements View.OnFocusChangeListener{
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facilty_screen);
editText = (EditText) findViewById(R.id.enter_location);
editText.setOnFocusChangeListener(this);
}
@Override
public void onFocusChange(View view, boolean b) {
if(view==editText){
// perfom your action here
}
}
}
您不需要在活动中实现它,替换
public class FacilityScreen extends AppCompatActivity implements AdapterView.OnItemSelectedListener,View.OnFocusChangeListener
to
public class FacilityScreen extends AppCompatActivity
另外,您可以在活动本身中覆盖onfocuschange方法,然后以Edittext进行设置,因此:
public class FacilityScreen extends AppCompatActivity implements AdapterView.OnItemSelectedListener,View.OnFocusChangeListener
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facilty_screen);
EditText editText = (EditText) findViewById(R.id.enter_location);
editText.setOnFocusChangeListener(this);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
// do something
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
});
}
您的类实现接口。这意味着该类(在您的示例中:活动(必须覆盖类中的所有非抽象方法。在这里,您已经混合了两种方法。如果您在类声明中实现界面,则无需创建内在类的新实例,例如
new OnFocusChangeListener() {
//override a method
}
可以,保留您的代码,只需删除即可。在这种情况下,您使用内部类方法。创建匿名实例并覆盖非抽象方法。
implements View.OnFocusChangeListener
版本1-班级级别的侦听器
如果您要班级处理听众,则必须说出视图:
editText.setOnFocusChangeListener(this);
然后,您必须在类级别上实现onFocusChange
。 Android Studio 应该通过几下帮助您完成此操作。结果应该是:
public class FacilityScreen extends AppCompatActivity implements AdapterView.OnItemSelectedListener,View.OnFocusChangeListener {
//your other methods
@Override
public void onFocusChange(View view, boolean hasfocus) {
// your code
}
}
版本2-将侦听器内联作为匿名类
实际上,您正在使用匿名类来处理侦听器内联。如果您想在那里听,而不是在班级级别上,则只需从类级别删除OnFocusChangeListener
即可。IE。删除implements AdapterView.OnItemSelectedListener,View.OnFocusChangeListener
并将其余的时间保持在。