클래스로 커스텀 다이얼로그를 하나 만들어놨습니다.
그리고 메인클래스에서
이 다이얼로그 클래스를 호출해서 커스텀다이얼로그 클래스 안의 내용을 전부 다이얼로그로 보여주려고 하는데 잘 안되는 부분이 있습니다.
소스와 함께 설명드리겠습니다
public class Main extends Activity{
Button button, button2;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// final dialog = new custom(this);
final custom dialog = new custom(this);
button = (Button)findViewById(R.id.btn);
button2 = (Button)findViewById(R.id.btn2);
button.setOnClickListener(new View.OnClickListener() { //이 안의 내용을 어찌써야할지 모르겠음
public void onClick(View v) {
dialog.show(); //이렇게하면 다이얼로그가 뜨긴뜨는데 custom클래스의 setTitle하고 버튼부분은 안먹히고. customdialog.xml부분만나옴
// dialog.custom(); //처음에 이렇게하면 될줄알았는데 안됨
}
});
}
}
class custom extends Dialog{
public custom(Context context) {
super(context);
final TextView text; // why final
Button button1;
Dialog dialog = new Dialog(context); // exnteds Dialog했기때문에 사실 필요없음. 이거 지우면
setContentView(R.layout.customdialog);
dialog.setContentView(R.layout.customdialog); //앞에 dialog.지워도됨
dialog.setTitle("Custom Dialog"); //마찬가지
text = (TextView)dialog.findViewById(R.id.text); //이것도
button1 = (Button)dialog.findViewById(R.id.btn1); //이것도
dialog.show(); //이거해놓으면 어플 실행시 처음에 자동으로 custom클래스 custom함수 실행됨 이미지1
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
text.setText("Change set Text");
}
});
}
소스는 이상입니다.
위의 소스대로하면 시작하자마자 custom클래스가 호출되고 그안의 show()로인해서 이미지1의 결과가 나옵니다.
근데 여기서 뒤로가기하고
메인화면에서 Button1을 누르면 다이얼로그가 보이긴하는데 다이얼로그의 Title이 보이지않고, 다이얼로그의 Button 이벤트도 먹히지않습니다. 원래대로라면 이미지1처럼 다이얼로그에서 Button클릭시 타이틀이 Change set Text 로 바뀌어야합니다.
근데 현재는 메인에서 Button1클릭해서 다이얼로그를 호출해보면 customdialog.xml에서 설정해놓은 이미지와, dialog start 텍스트, button이미지 밖에 보이지않습니다. 한마디로 custom 클래스 내부의 기능은 실행되고 있지 않습니다.
이전에 자바 공부할때
public class animal {
String name;
int age;
protected void sound(){
System.out.println("this is walwal!!!");
}
void eat(){
System.out.println("waguwagu");
}
}
public class animaltest {
public static void main(String[] args) {
animal animal1 = new animal();
animal1.eat();
}
}
이런거 했던거 기억을 살려서
메인클래스에서
button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
// dialog.custom(); //처음에 이렇게하면 될줄알았는데 안됨
}
});
저기 주석해놓은 저부분 저렇게 했는데 안되더군요...
메인에서 버튼 클릭했을때도 이미지2가 아니라 이미지1처럼 나오게하고싶은데.
custom클래스의 내용 그대로 한번에 호출할 수 없는지 궁금합니다..
사실 setTitle은
button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
dialog.setTitle("아오빡처");
dialog.show();
}
});
이렇게 해주면 되기는 되는데 이렇게 하기싫습니다.
예를들어 버튼 10개있는데 10개 다 눌러도 똑같은 내용의 커스텀다이얼로그 custom 클래스의 내용이 나오게 하고싶습니다.
그럼 버튼10개 클릭리스너에 일일이 dialog.setTitle해주고 다이얼로그안의 버튼 클릭리스너 내용 지정해주고
이렇게 하지않고.
그냥 dialog.custom();
이런식으로 해서 만들어놓은 custom클래스의 내용 그 자체를 전부 불러와서 다이얼로그로 띄울 수 있는 방법이 없을까요..진정 없나...ㅠㅠ
이미지1
이미지2