android - 从外部类文件中定义的监听器启动 Android Activity

标签 android android-activity listener

我有一个 Activity MyActivity 和一个按钮 MyButton

我想将 MySpecialOnClickListener 附加到 MyButton

我在外部类文件中编写了 MySpecialOnClickListener

public class MySpecialOnClickListener extends ButtonHandler implements OnClickListener {
    public OnClickListenerWithSpeech (Context context) 
       { super.context = context; }

    @Override
    public void onClick(View view) {  handleClick(view);  }
}

ButtonHandler 看起来像这样

public abstract class ButtonHandler {

    protected Context context;

    protected void handleClick (View view){
        if (view.getid()==R.id.button_B) {
            context.startActivity (new Intent(context, ActivityC.class));
        }
    }
}

我基本上想在 ButtonHandler 中存储 Button 的所有逻辑。

所以...如我所说,我在外部类文件中定义了 MySpecialOnClickListener

当我单击 MyButton 时,出现以下 fatal error 。

Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

所以我无法从非 Activity 中正常启动 Activity。很公平。

但是,如果我将 MySpecialOnClickListener 更改为“MyActivity”中的内部类,它就可以正常工作。请记住“ButtonHandler”仍然是一个外部类文件。所以它(ActivityC 最终从哪里开始)不会改变。

我的问题(最后)是:有人可以解释为什么允许一个而另一个不允许的逻辑。我认为它是一个范围界定的东西,但我有点困惑。似乎启动 Activity 过程的代码必须字面上在另一个 Activity 中。

编辑 - 问题已解决

见下文。类的位置无关紧要。我只是没有正确传递上下文。

最佳答案

因为 ButtonHandler 的“上下文”字段不与任何 Activity 上下文相关联。因此,当您将 MySpecialOnClickListener 实例附加到您创建的按钮时,它会传递上下文参数,不是吗???

像这样:

MySpecialOnClickListener listener = new MySpecialOnClickListener(MyActivity.this);
aButton.setOnClickListener( listener );

通过这种方式,您可以使用正确的上下文构建 Button...

关于android - 从外部类文件中定义的监听器启动 Android Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5182518/

相关文章:

android - 尝试将数据( bundle/附加)传递到 fragment 中

android - VideoView 进度回调

java - TIBCO 房车 : Listen to two networks at same time?

java - WCF Duplex 服务和 Android 客户端?任何可能性

java - 使用后台服务播放音乐时,音乐在移动到另一个 Activity 时停止

android - 如何在 android 仪器测试类中运行单个测试方法以及如何为此更改编辑配置

android - 将 html 从 AsyncTask 对象传递回调用 Activity

javascript - 如何使用 javascript 创建监听器

android - 如何保持一个activity之前的状态

Android 方向 仅纵向布局不起作用