Android - Использование одного и того же диалога для нескольких видов - проблема с настройкой - PullRequest
0 голосов
/ 24 мая 2011

У меня возникли проблемы с простым диалогом, над которым я работаю.У меня есть три различных TextView, при нажатии на которые у меня появляется диалоговое окно, содержащее только заголовок и один текст редактирования.Я пытаюсь сделать так, чтобы я использовал одно и то же настраиваемое диалоговое окно для всех трех текстовых представлений, но в зависимости от того, какой текстовый вид нажат, диалоговое окно устанавливает новое значение для этого TextView.Ниже приведен мой код: @ Переопределить защищенный диалог onCreateDialog (int id) {super.onCreateDialog (id);CustomDialogPercent dialog = null;

    switch(id){
    case 1:
        dialog = new CustomDialogPercent(this, id);
        dialog.setTitle("Shipping Percent");
        dialog.show();
        break;
    case 2:
        dialog = new CustomDialogPercent(this, id);
        dialog.setTitle("Tax Percent");
        dialog.show();
        break;
    case 3:
        dialog = new CustomDialogPercent(this, id);
        dialog.setTitle("Commission Percent");
        dialog.show();
        break;
    default:
        dialog = null;
    }
    return dialog;
}

private void registerListeners() {
    shippingPercent.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(1);
        }
    });

    taxPercent.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(2);
        }
    });

    commissionPercent.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(3);
        }
    });
}

public class CustomDialogPercent extends Dialog {

    int id = 0;

    public CustomDialogPercent(Context context, int id) {
        super(context);
        this.id = id;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.basic_dialog);

        basicDialogEntry = (EditText) findViewById(R.id.basic_dialog_entry);
        basicDialogEntry.setKeyListener(DigitsKeyListener.getInstance(true,true));


    }

    @Override
    public void onStart() {
        super.onStart();

        switch(id) {
        case 1:
            basicDialogEntry.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {

                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(basicDialogEntry.getWindowToken(), 0);                      

                        shippingPercent.setText(basicDialogEntry.getText().toString());

                        try {
                            if ((Float.parseFloat(basicDialogEntry.getText().toString())) < 0) {}
                        }catch(Exception ex) {
                            shippingPercent.setText("0");
                        }

                        mathCalculations();

                        CustomDialogPercent.this.dismiss();
                    }   
                    return false;
                }
            });
            break;
        case 2:
            basicDialogEntry.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {

                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(basicDialogEntry.getWindowToken(), 0);                      

                        taxPercent.setText(basicDialogEntry.getText().toString());

                        try {
                            if ((Float.parseFloat(basicDialogEntry.getText().toString())) < 0) {}
                        }catch(Exception ex) {
                            taxPercent.setText("0");
                        }

                        mathCalculations();

                        CustomDialogPercent.this.dismiss();
                    }   
                    return false;
                }
            });
            break;
        case 3:
            basicDialogEntry.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {

                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(basicDialogEntry.getWindowToken(), 0);                      

                        commissionPercent.setText(basicDialogEntry.getText().toString());

                        try {
                            if ((Float.parseFloat(basicDialogEntry.getText().toString())) < 0) {}
                        }catch(Exception ex) {
                            commissionPercent.setText("0");
                        }

                        mathCalculations();

                        CustomDialogPercent.this.dismiss();
                    }   
                    return false;
                }
            });
            break;
        }
    }
}

ОК.С этим кодом происходит то, что я впервые касаюсь каждого TextView, который работает отлично.Но как только я нажимаю на любой из них снова, диалоговые окна всплывают правильно с правильным заголовком, но значения, которые возвращаются обратно в TextView, неверны.

Пример;я ввожу 8 для процентов отгрузки и их 25 для процентов процентов.А затем я возвращаюсь к shippingPercent и ввожу 5. 5 не устанавливается.Вместо этого это будет 25. Если я продолжу использовать диалоговые окна, похоже, что мой mathCalculations () перестает работать.

Спасибо за помощь.

1 Ответ

1 голос
/ 24 мая 2011

Может быть, вы могли бы присвоить переменную

activeTextView = theTextViewYouWant;

... и затем обновить activeTextView требуемым значением?

...