Как изменить значение из AlertDialog? - PullRequest
0 голосов
/ 08 марта 2012

Пока трудно определить EditText с ListView, я попробовал другое решение: A ListView с TextViews, и когда вы нажимаете на него, я ловлю сфокусированный TextView со слушателем (OnItemClickListener на родительском ListView), и я открываю AlertDialog.

ВЫПУСК : Когда я нажимаю кнопку OK на AlertDialog, я хочу, чтобы сфокусированный TextView получил текстовое значение диалогового окна предупреждения EditText, но оно не работает, он сохраняет то же текстовое значение. По активности:

        listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int pos, long id){

            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

            id ++;
            t = new TextView(activity);
            t = (TextView) v;

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);

            alert.setTitle("Title");
            alert.setMessage("Message");

            // Set an EditText view to get user input 
            final EditText input = new EditText(activity);
            input.setText(t.getText());
            alert.setView(input);

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    //Changer la valeur dans la base et dans la liste


                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS,0);

                    t.setText(input.getText());

                    System.out.println("input avant : " + t.getText());
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });


            alert.show();
        }
    });

Я думаю, этого кода достаточно, чтобы вы знали, что не так в моем коде. Просто чтобы вы знали:

  • ListView и t (TextView) объявлены как частные переменные в классе активности
  • существует класс Adapter, который автоматически создает список TextView
  • если я изменяю значение EditText на приемнике ListView, это работает, но в приемнике предупреждений диалогового окна - нет.

Спросите, хотите ли вы больше информации.

1 Ответ

2 голосов
/ 08 марта 2012

Я не знаю, как вы создали свой адаптер, поэтому я угадаю ответ.Вам нужно будет поместить свой текст в данные адаптера (например, в ArrayList, который вы даете своему адаптеру) и позвонить notifyDataSetChanged() на адаптер.

//ArrayList field on which your adapter is based ?!?(if you used this)
private ArrayList<String> items;

 listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, final View v, int pos, long id){

            AlertDialog.Builder alert = new AlertDialog.Builder(activity);

            alert.setTitle("Title");
            alert.setMessage("Message");
            final EditText input = new EditText(activity);
            input.setText(t.getText());
            alert.setView(input);

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    items.set(pos, input.getText().toString());
                    adapterObject.notifyDataSetChanged();  // the adapter you set in the listView.setAdapter();
                }
            });
            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });


            alert.show();
        }
    });
...