首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从自定义按钮访问活动

从自定义按钮访问活动
EN

Stack Overflow用户
提问于 2012-10-29 20:49:38
回答 2查看 3.6K关注 0票数 4

也许我错过了这里的东西,但它在这里。假设我扩展了Button

代码语言:javascript
运行
复制
    public class MyButton extends Button {
        ...
        public MyButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            ...
        }
    }
  1. 如果MyButton在例如MyActivity中,我可以简单地将上下文转换为活动。
  2. 现在,如果MyButton是MyDialog (扩展对话框)的一部分,context.getClass()将指向ContextThemeWrapper,而我无法获得活动。

那么,在第二种情况下,如何获得对话或活动的实例呢?

编辑 Ok更多代码以更好地说明我想做的事情:

代码语言:javascript
运行
复制
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();
    }

}

在连接侦听器之后,在其他类中的某个位置:

代码语言:javascript
运行
复制
@Override
public void onClick(View v) {
    Command command = (Command) v;
    command.execute();
}
EN

回答 2

Stack Overflow用户

发布于 2014-12-12 00:00:21

我也遇到过类似的情况,我用这段代码来解决我的案子:

代码语言:javascript
运行
复制
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;
}

希望这能帮上忙。

票数 20
EN

Stack Overflow用户

发布于 2012-10-29 20:55:44

我不完全理解你在做什么,但是你应该能够从你的对话框中获得getOwnerActivity()活动的参考。

也许:

代码语言:javascript
运行
复制
public MyButton(Context context, AttributeSet attrs) {
    super(context, attrs);

    Activity activity = getOwnerActivity();
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13129428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档