Android Dialog - запутался - PullRequest
       2

Android Dialog - запутался

0 голосов
/ 18 августа 2010

Я пытался справиться с диалогами.Я прочитал информацию о сайте разработчиков Android и дюжину болгов.Кажется, есть несколько способов сделать это, и я могу по крайней мере получить диалоговое окно с 3 кнопками (не используя настраиваемое диалоговое окно с пользовательским макетом).

Если я настроил положительный / отрицательный / нейтральныйдействия с чем-то вроде finish (), cancel () и т. д., он работает с этими вызовами.

Но я хочу сделать, чтобы кнопки делали что-то большее, если только отображают текст, используя строку, определенную вОсновной код (не тост).В конце концов, я хочу ввести некоторые цифры в диалоге и вернуть их в виде строки.Да, я могу сделать это с другого экрана активности, но предпочитаю не делать этого, так как мне нравится компактный размер диалога.

Даже обман и возвращение целого числа в основной код для выполнения некоторых переключений / падежей было бы хорошоно я, похоже, не могу даже вернуть целое число.

Я понимаю, что мне нужно сделать настраиваемое диалоговое окно с предупреждением, чтобы выполнить ввод данных, и ниже я попытаюсь начать с простой попытки вернутьстрока или целое число - кажется, что оно меня туда не приводит!

Этот код представляет диалог с 3 кнопками.Это только одна из попыток, которые я сделал (целочисленный возврат удален) ...

Что я могу сделать, чтобы вернуть целое число в основной код из диалоговой кнопки? Нет кодаошибки или предупреждения, это просто не работает, как я надеялся ...

    public class Maincode extends Activity {
public static String rtndMessage = "Push Button";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final TextView text = (TextView) findViewById(
            R.id.TextView01);
    final Button doIt = (Button) findViewById(R.id.Button01);

    //  -----------------------------------------------------
    doIt.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // do something
            Dialog1();          // call Dialog1
        }
    }); // end -----------------------------------------------
// do the rest of the code (ie, display the result of doIt)
text.setText(rtndMessage);  // set text w/result
}//end onCreate ----------------------------------------------

public void Dialog1() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Dialog Test");
builder.setIcon(R.drawable.redtest);
// chain the following together
  builder.setMessage("Send text: Yes, No, Cancel")
    // the positive action ----------------------------------
    .setPositiveButton("Yes Action", new
        DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int id){            
            Maincode.rtndMessage = "sent Yes back";             
        }
    })
    // The negative action ----------------------------------
    .setNegativeButton("No Action", new
            DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int id){
            Maincode.rtndMessage = "sent No back";
        }
    })
    // The negative action ------------------------------
    .setNeutralButton("Cancel", new
            DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int id){
            Maincode.rtndMessage = "sent N/A back";
            dialog.cancel();    // just return to activity
        }           
});    

builder.show ();// показать диалог} // конец диалога} // конец действия

Ответы [ 3 ]

4 голосов
/ 18 августа 2010

Вы можете реализовать диалог как отдельное действие и получить любое необходимое вам поведение. Просто примените стандартную тему Android Theme.Dialog к действию, чтобы она выглядела как диалог. Также вы можете создать собственную тему, указав Theme.Dialog в качестве родителя.

1 голос
/ 10 января 2012

Это ОЧЕНЬ поздно, но, надеюсь, это поможет другим в будущем. Я создал собственный диалог, в котором реализован OnClickListener:

public class LoginDialog extends Dialog implements OnClickListener{

    public LoginDialog(Context context) {
    super(context);
    this.context = context;
    // TODO Auto-generated constructor stub

    }

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog);
    setTitle("Enter Login Details");
    setCancelable(true);

    etUsername = (EditText) findViewById(R.id.etUsername);
    etPassword = (EditText) findViewById(R.id.etPassword);
    bLogin = (Button) findViewById(R.id.bDialogLogin);
    bCancel = (Button) findViewById(R.id.bDialogCancel);

    bLogin.setOnClickListener(this);
    bCancel.setOnClickListener(this);


   }

    public void onClick(View v) {

    switch (v.getId()) {
    case R.id.bDialogLogin:
        //Check credentials.  If they pass:
        cancel();

        //if they don't pass, throw an alert or something
      break;

    case R.id.bDialogCancel:
        dismiss();
      break;
    }

    }
}

Затем в своем основном коде я реализовал onCancelListener (в диалогах есть подготовленные для вас слушатели onCancel и onDismiss).

//This calls my alert dialog.  Place this in the onClick of a button or something
loginDialog = new LoginDialog(this);
loginDialog.show();


loginDialog.setOnCancelListener(new OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {
            // TODO Auto-generated method stub

            //This code is run whenever the cancel(); function in the dialog is called.

        }
    });

Надеюсь, это поможет!

1 голос
/ 18 августа 2010

Android 1.6+ предоставляет простой в использовании набор диалоговых функций для вашей активности.

Когда вы создаете диалоги, просто делайте все, что нужно, в методах onClick () кнопок диалога. Ниже приведен пример, который у меня есть, в переключателе DIALOG_CONFIRM_DELETE, где я удаляю запись для локальной базы данных и запрашиваю курсор.

Я бы взглянул на раздел «Создание диалогов» в руководстве разработчика на http://d.android.com В нем показано, как использовать функции диалога. http://developer.android.com/guide/topics/ui/dialogs.html

@Override
protected Dialog onCreateDialog(int id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    switch (id) {
        case DIALOG_CONFIRM_DELETE:
            builder
                .setTitle("Confirm")
                .setMessage("Are you sure you want to delete that access point?")
                .setCancelable(true)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        mDbAdapter.delete(SELECTED_AP_ID);
                        mCursor.requery();
                    }
                }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.dismiss();
                    }
                });
            return builder.create();
        case DIALOG_EXPORTING:
            ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.setMessage("Exporting...");
            progressDialog.setCancelable(false);
            progressDialog.show();
            return progressDialog;
        case DIALOG_GPS_DISABLED:
            builder
                .setTitle("GPS signal not Found")
                .setMessage("GPS is not enabled, and accuracy may be effected.")
                .setCancelable(false)
                .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        startService();
                        dialog.dismiss();
                    }
                });
            return builder.create();
        default:
            return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...