如何正确终止自定义视图类的活动?

问题描述

类似于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()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...