gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:14:26 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com