어쩌면 여기에 sth가 누락되었지만 여기에 있습니다. 내가 버튼 확장한다고 가정 해 봅시다맞춤 검색 버튼에서 활동에 액세스
public class MyButton extends Button {
...
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
...
}
}
- MyButton에 예컨대에있는 경우 MyActivity 나는 단순히 컨텍스트를 활동에 캐스팅 할 수있다.
- MyButton이 MyDialog (대화 상자 확장)의 일부인 경우 context.getClass()가 ContextThemeWrapper를 가리키고 액티비티를 가져올 수 없습니다.
두 번째 경우에는 대화 나 작업의 인스턴스를 어떻게 얻을 수 있습니까?
편집 좋아 더 나은 내가하고 싶었던 것을 설명하기 위해 더 많은 코드 : 어딘가에
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();
}
질문에 대한 문맥을 기재하십시오. 대화 상자 또는 활동 인스턴스로 무엇을 하시겠습니까? –
예를 들어 MyButton은 execute() 메서드를 사용하여 Command 인터페이스를 구현할 수 있으며 일부 외부 클래스에서는 command = (Command) v;로 onClick() 메서드를 사용할 수 있습니다. 버튼을 클릭하면 execute() 메서드가 실행됩니다. 대화 상자를 닫으려면 예를 들어 MyButton 내부에서 대화 상자 인스턴스로 이동해야합니다. 난 그냥 궁금해서/이것을 읽은 후 놀고 : http://alvinalexander.com/java/java-command-design-pattern-in-java-examples – krisk