我有一个 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/