如何从自定义视图 class 中正确终止 activity?
How to properly terminate an activity from a custom view class?
类似于thispost。有一个自定义视图(扩展 EditText
),如果用户按下 END 键,它必须能够调用父 activity 的 finish()
方法。
如何访问主机 activity 的 activity
对象,以便从自定义视图 class 中调用其 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;
}
}
我可以使用我的 class 的 getContext()
方法,可用是因为它继承自 view
,以获取上下文,但我不知道如何使用它来访问 finish()
方法。任何帮助或指点将不胜感激。
更新:
寻找可以保持 class 独立的解决方案。谢谢!
如果您知道主机,即显示自定义视图的 activity,那么您可以这样做。
(getContext() as? MainActivity)?.finish()
java
((MainActivity)getContext()).finish()
把它放在 try and catch 下
编辑:创建一个你的主机activity实现的接口,并将其作为监听器传递给你的自定义视图,然后在需要时调用它。
例如
interface CustomInputEditListener{
public void onFinish();
}
在您的主机中 activity 执行此操作。
MainActivity extends AppCompatActivity() implements CustomInputEditListener{
//call this from onCreate()
public void setHostListener(){
suppressInputEditText.setHostEditListener(this);
}
@Override public void onFinish(){
finish() ;
}
}
在您的 SuppressInputEditText class 中创建这样的方法。
public void setHostEditListener(CustomInputEditListener listener){
this.hostListener = listener;
}
只要你需要调用 finish 就调用
hostListener.onFinish();
将 context
转换为 Activity
然后像下面这样调用 finish
科特林
(context as? Activity)?.finish()
Java
((Activity) context).finish()
类似于thispost。有一个自定义视图(扩展 EditText
),如果用户按下 END 键,它必须能够调用父 activity 的 finish()
方法。
如何访问主机 activity 的 activity
对象,以便从自定义视图 class 中调用其 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;
}
}
我可以使用我的 class 的 getContext()
方法,可用是因为它继承自 view
,以获取上下文,但我不知道如何使用它来访问 finish()
方法。任何帮助或指点将不胜感激。
更新: 寻找可以保持 class 独立的解决方案。谢谢!
如果您知道主机,即显示自定义视图的 activity,那么您可以这样做。
(getContext() as? MainActivity)?.finish()
java
((MainActivity)getContext()).finish()
把它放在 try and catch 下
编辑:创建一个你的主机activity实现的接口,并将其作为监听器传递给你的自定义视图,然后在需要时调用它。
例如
interface CustomInputEditListener{
public void onFinish();
}
在您的主机中 activity 执行此操作。
MainActivity extends AppCompatActivity() implements CustomInputEditListener{
//call this from onCreate()
public void setHostListener(){
suppressInputEditText.setHostEditListener(this);
}
@Override public void onFinish(){
finish() ;
}
}
在您的 SuppressInputEditText class 中创建这样的方法。
public void setHostEditListener(CustomInputEditListener listener){
this.hostListener = listener;
}
只要你需要调用 finish 就调用
hostListener.onFinish();
将 context
转换为 Activity
然后像下面这样调用 finish
科特林
(context as? Activity)?.finish()
Java
((Activity) context).finish()