问题描述
类似于this的帖子。有一个自定义视图(扩展了EditText
),如果用户按下END键,则该视图必须能够调用父活动的finish()
方法。
如何在自定义视图类中访问主机活动的activity
对象以调用其finish()
方法?
public class SuppressInputEditText extends androidx.appcompat.widget.AppCompatEditText {
public SuppressInputEditText(Context context) {
super(context);
}
public SuppressInputEditText(Context context,AttributeSet attrs) {
super(context,attrs);
}
public SuppressInputEditText(Context context,AttributeSet attrs,int defStyleAttr) {
super(context,attrs,defStyleAttr);
}
@Override
public boolean onKeyPreIme(int keyCode,KeyEvent event) {
return true;
}
@Override
public boolean onKeyDown(int keyCode,KeyEvent event) {
return true;
}
@Override
public boolean onKeyUp(int keyCode,KeyEvent event) {
switch (keyCode){
case 6: //end key
//todo: call finish() method of parent activity.
break;
}
return true;
}
}
我可以使用班级的getContext()
方法(因为它继承自view
)可以获取上下文,但是我不知道如何使用该方法来访问{{1} } 方法。任何帮助或指示,将不胜感激。
更新: 寻找可以使类保持独立的解决方案。谢谢!
解决方法
如果您知道主机(即自定义视图所在的活动),则可以执行以下操作。
(getContext() as? MainActivity)?.finish()
java
((MainActivity)getContext()).finish()
将其置于尝试并抓住
编辑:创建一个由您的Host活动实现的接口,并将其作为侦听器传递给您的自定义视图,然后在需要时调用它。
例如。
interface CustomInputEditListener{
public void onFinish();
}
在您的“主持人”活动中实施此操作。
MainActivity extends AppCompatActivity() implements CustomInputEditListener{
//call this from onCreate()
public void setHostListener(){
suppressInputEditText.setHostEditListener(this);
}
@Override public void onFinish(){
finish() ;
}
}
在SuppressInputEditText类中创建这样的方法。
public void setHostEditListener(CustomInputEditListener listener){
this.hostListener = listener;
}
只要您需要打完电话,就只需致电
hostListener.onFinish();
,
将context
投射到Activity
,然后像下面这样呼叫完成
科特琳
(context as? Activity)?.finish()
Java
((Activity) context).finish()