gpt4 book ai didi

android - 从自定义按钮访问 Activity

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:17 28 4
gpt4 key购买 nike

也许我在这里遗漏了某物,但它就在这里。假设我扩展了 Button

    public class MyButton extends Button {
...
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
...
}
}
  1. 如果 MyButton 位于例如MyActivity 我可以简单地将上下文转换为 Activity 。
  2. 现在,如果 MyButton 是 MyDialog(扩展 Dialog)的一部分,context.getClass() 将指向 ContextThemeWrapper,我无法获得 Activity 。

那么在第二种情况下如何获取对话或 Activity 的实例呢?

编辑好的,更多代码可以更好地说明我想做什么:

public class MyDialog extends Dialog {
private MyButton myButton;

public MyDialog(Context context) {
super(context)

this.setContentView(R.layout.my_dialog);
this.setTitle("My Dialog");

myButton = (MyButton) findViewById(R.id.my_button);
}
}

public class MyButton extends Button implements Command {
private MyActivity myActivity;

public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);

System.out.println(context instanceof ContextThemeWrapper); // TRUE
System.out.println(context instanceof Activity); // FALSE

myActivity = ??? // or myDialog = ???
}

@Override
public void execute() {
MyDialog myDialog = myActivity.getMyDialog();
myDialog.cancel();
}

}

连接监听器后在其他类中的某个地方:

@Override
public void onClick(View v) {
Command command = (Command) v;
command.execute();
}

最佳答案

我有类似的情况,我用这个 fragment 解决了我的问题:

private static Activity scanForActivity(Context cont) {
if (cont == null)
return null;
else if (cont instanceof Activity)
return (Activity)cont;
else if (cont instanceof ContextWrapper)
return scanForActivity(((ContextWrapper)cont).getBaseContext());

return null;
}

希望这可以帮助到一些人。

关于android - 从自定义按钮访问 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13129428/

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