Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing activity from custom button

Tags:

android

Maybe I'm missing sth here but here it is. Let say I extended Button

    public class MyButton extends Button {
        ...
        public MyButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            ...
        }
    }
  1. If MyButton is in e.g. MyActivity I can simply cast context to activity.
  2. Now if MyButton is part of MyDialog (extends Dialog), context.getClass() will point to ContextThemeWrapper and I can not get activity.

So how can I get instance of dialog or activity in the second case?

EDIT Ok more code to better illustrate what I wanted to do:

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();
    }

}

and somewhere in other class after connecting listener:

@Override
public void onClick(View v) {
    Command command = (Command) v;
    command.execute();
}
like image 793
krisk Avatar asked Nov 29 '22 13:11

krisk


1 Answers

I had similar situation and I solve my case wit this snippet:

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;
}

Hope that this can help somebody.

like image 130
kikea Avatar answered Dec 22 '22 13:12

kikea