Здравствуйте!
Разбираю один пример кода по созданию диалога для ввода данных.
Есть отдельный клас DialogFactory для создания кастомного диалога
Код: Выделить всё
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.EditText;
import android.widget.Toast;
public class DialogFactory {
protected DialogFactory() {};
public final static int DIALOG_INPUT = 0;
public static Dialog getDialogById(int id, final Context context) {
Dialog dialog = null;
switch (id) {
case DIALOG_INPUT:
dialog = createInputAlert(context);
break;
}
return dialog;
}
private static Dialog createInputAlert(final Context context) {
Dialog dialog;
Builder builder = new Builder(context);
final EditText editText = new EditText(context);
DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
switch(id) {
case Dialog.BUTTON_POSITIVE:
Toast.makeText(context, "Press positive button", Toast.LENGTH_SHORT).show();
//Intent intent = new Intent();
//intent.putExtra("_dlgpassword", editText.getText().toString());
//setResult(RESULT_OK, intent);
break;
case Dialog.BUTTON_NEGATIVE:
//Toast.makeText(context, "Press negative button", Toast.LENGTH_SHORT).show();
break;
}
}
};
dialog = builder.setMessage("Message")
.setTitle("Title")
.setPositiveButton("OK", onClickListener)
.setNegativeButton("CANCEL", onClickListener)
.setView(editText).create();
return dialog;
}
}
В MainActivity вызов диалога осуществляется следующим образом showDialog(DialogFactory.DIALOG_INPUT)
Код: Выделить всё
import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 0;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
// full screen mode
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
showDialog(CustomDialog.DIALOG_INPUT);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
}
@Override
protected Dialog onCreateDialog(int id) {
return CustomDialog.getDialogById(id, this);
}
public void onBackPressed(){
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
switch(requestCode){
case REQUEST_CODE:
Toast.makeText(this, getIntent().getStringExtra("_dlgpassword"), Toast.LENGTH_SHORT).show();
break;
}
}
}
}
Собственно суть вопроса.
Как в MainActivity получить данные введенные в TextEdit в данном диалог?е вызванном из главной активити?
Пробовал через Intent с setResult (закоментированные строки)
и onActivityResult (в главной активити) но в таком варианте создания диалога setResult не работает, екслипс даже не показывает такого метода, подчеркнуто красным.
Обмен данными между двумя активити через интенты работает, а вот диалог и активити, нет.