안드로이드 개발 질문/답변
(글 수 45,052)
현재 dialog를 제 맘대로 디자인 해서 띄우는 것까지는 성공했습니다.
AlertDialog를 java 파일을 하나 더 만들어서 그곳에서 생성을 하고,
AlertDialog를 java 파일을 하나 더 만들어서 그곳에서 생성을 하고,
main.java에서 생성한 것들을 불러와서 띄우는 형식으로 구현했습니다. (아마도요;;)
근데 여기서 생성한 EditText가 있는데 그것을 main.java에서 그 입력값을 가지고 작업을 해야 하는데..
그 값을 어찌 받아오느냐가 문제가 되더라구요.
그래서 intent를 이용하려고 했는데, intent가 먹히지 않습니다..
Dialog를 상속받는 class에서는 intent가 안 되는 걸까요?
어떡해야 저 EditText에서 값을 받아와 main.java에서 작업을 할 수 있을까요?ㅠㅠ
그 값을 어찌 받아오느냐가 문제가 되더라구요.
그래서 intent를 이용하려고 했는데, intent가 먹히지 않습니다..
Dialog를 상속받는 class에서는 intent가 안 되는 걸까요?
어떡해야 저 EditText에서 값을 받아와 main.java에서 작업을 할 수 있을까요?ㅠㅠ
우선 Dialog에 어떤 것들이 들어갈 것인지를 설정한 java 파일입니다.
public class CustomDialog extends Dialog {
public static EditText FileNameInput;
public static String FileNameInputStringText;
public CustomDialog(Context context, int theme) {
super(context, theme);
}
public CustomDialog(Context context) {
super(context);
}
public static class Builder {
private Context context;
private String title;
private Editable message;
private String positiveButtonText;
private View contentView;
private DialogInterface.OnClickListener positiveButtonClickListener;
public Builder(Context context) {
this.context = context;
}
public Builder setMessage(Editable message) {
this.message = message;
return this;
}
public Builder setMessage(int message) {
this.message = (Editable) context.getText(message);
return this;
}
public Builder setTitle(int title) {
this.title = (String) context.getText(title);
return this;
}
public Builder setTitle(String title) {
this.title = title;
return this;
}
public Builder setContentView(View v) {
this.contentView = v;
return this;
}
public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) {
this.positiveButtonText = (String) context.getText(positiveButtonText);
this.positiveButtonClickListener = listener;
return this;
}
public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) {
this.positiveButtonText = positiveButtonText;
this.positiveButtonClickListener = listener;
return this;
}
public CustomDialog create() {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final CustomDialog dialog = new CustomDialog(context, R.style.Dialog);
View layout = layoutInflater.inflate(R.layout.name_dialog, null);
dialog.addContentView(layout, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
((TextView) layout.findViewById(R.id.title)).setText(title);
FileNameInput = (EditText) layout.findViewById(R.id.message);
FileNameInput.setText(message);
FileNameInput.setBackgroundColor(Color.TRANSPARENT); // EditText 배경 없애기
FileNameInputStringText = FileNameInput.getText().toString();
if (positiveButtonText != null) {
((Button) layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);
if (positiveButtonClickListener != null) {
((Button) layout.findViewById(R.id.positiveButton)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
positiveButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
}
});
}
else {
layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);
}
}
else if (contentView != null) {
((LinearLayout) layout.findViewById(R.id.content)).removeAllViews();
((LinearLayout) layout.findViewById(R.id.content)).addView(contentView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
dialog.setContentView(layout);
return dialog;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void aaaaaaa() {
Intent intent = new Intent(CustomDialog.this, PlanB.class); 여기와
intent.putExtra("inputName", FileNameInputStringText);
startActivityForResult(intent, 0); 여기서 에러가 납니다.ㅠㅠ 다른 보통의 class에서 이런 형식으로 intent 했을 때는 잘만 됐었는데.. 여기선 이렇게 하면 안 되는 걸까요?
}
}
public static EditText FileNameInput;
public static String FileNameInputStringText;
public CustomDialog(Context context, int theme) {
super(context, theme);
}
public CustomDialog(Context context) {
super(context);
}
public static class Builder {
private Context context;
private String title;
private Editable message;
private String positiveButtonText;
private View contentView;
private DialogInterface.OnClickListener positiveButtonClickListener;
public Builder(Context context) {
this.context = context;
}
public Builder setMessage(Editable message) {
this.message = message;
return this;
}
public Builder setMessage(int message) {
this.message = (Editable) context.getText(message);
return this;
}
public Builder setTitle(int title) {
this.title = (String) context.getText(title);
return this;
}
public Builder setTitle(String title) {
this.title = title;
return this;
}
public Builder setContentView(View v) {
this.contentView = v;
return this;
}
public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) {
this.positiveButtonText = (String) context.getText(positiveButtonText);
this.positiveButtonClickListener = listener;
return this;
}
public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) {
this.positiveButtonText = positiveButtonText;
this.positiveButtonClickListener = listener;
return this;
}
public CustomDialog create() {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final CustomDialog dialog = new CustomDialog(context, R.style.Dialog);
View layout = layoutInflater.inflate(R.layout.name_dialog, null);
dialog.addContentView(layout, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
((TextView) layout.findViewById(R.id.title)).setText(title);
FileNameInput = (EditText) layout.findViewById(R.id.message);
FileNameInput.setText(message);
FileNameInput.setBackgroundColor(Color.TRANSPARENT); // EditText 배경 없애기
FileNameInputStringText = FileNameInput.getText().toString();
if (positiveButtonText != null) {
((Button) layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);
if (positiveButtonClickListener != null) {
((Button) layout.findViewById(R.id.positiveButton)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
positiveButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
}
});
}
else {
layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);
}
}
else if (contentView != null) {
((LinearLayout) layout.findViewById(R.id.content)).removeAllViews();
((LinearLayout) layout.findViewById(R.id.content)).addView(contentView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
dialog.setContentView(layout);
return dialog;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void aaaaaaa() {
Intent intent = new Intent(CustomDialog.this, PlanB.class); 여기와
intent.putExtra("inputName", FileNameInputStringText);
startActivityForResult(intent, 0); 여기서 에러가 납니다.ㅠㅠ 다른 보통의 class에서 이런 형식으로 intent 했을 때는 잘만 됐었는데.. 여기선 이렇게 하면 안 되는 걸까요?
}
}
EditText에 뜨는 hint는 style에서 적용시켰습니다.
그리고 위에서 정의한 dialog를 불러와 dialog를 만들고 처리과정을 해야 할 main.java입니다.
특정 버튼을 눌렀을 때 dialog가 뜨게끔 하고 있습니다.
private final int DIALOG_ID = 1;
@Override
public Dialog onCreateDialog(int DIALOG_ID) {
Dialog dialog = null;
try {
switch (DIALOG_ID) {
case 1:
CustomDialog.Builder customBuilder = new CustomDialog.Builder(PlanB.this); // PlanB는 main.java의 이름이예요.
customBuilder.setTitle(" ")
.setMessage(FileNameGetEdit)
.setPositiveButton(" ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
dialog = customBuilder.create();
break;
}
}
catch(Exception e) {
Toast.makeText(PlanB.this, "저장 실패...", Toast.LENGTH_LONG).show();
}
return dialog;
}
public Dialog onCreateDialog(int DIALOG_ID) {
Dialog dialog = null;
try {
switch (DIALOG_ID) {
case 1:
CustomDialog.Builder customBuilder = new CustomDialog.Builder(PlanB.this); // PlanB는 main.java의 이름이예요.
customBuilder.setTitle(" ")
.setMessage(FileNameGetEdit)
.setPositiveButton(" ", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
dialog = customBuilder.create();
break;
}
}
catch(Exception e) {
Toast.makeText(PlanB.this, "저장 실패...", Toast.LENGTH_LONG).show();
}
return dialog;
}
현재 최종 띄운 Dialog의 모습은
ImageView처럼 보이지만 TextView에 background를 줘서 text는 입력하지 않고
imageView를 대신한 것뿐이구요. 그 아래로는 입력 받을 EditText, 그리고 버튼을 위치시켰습니다.
EditText에는 hint도 적용시켰구요.




Intent intent = new Intent(CustomDialog.this, PlanB.class);
여기서 CustomDialog.this 대신에 mContext 넣으면 될겁니다.