Контроль доступа в диалоге настраиваемых предупреждений в Android - PullRequest
2 голосов
/ 04 июня 2010

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

LayoutInflater factory = LayoutInflater.from(this);
            final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
            return new AlertDialog.Builder(AlertDialogSamples.this)
                .setIcon(R.drawable.alert_dialog_icon)
                .setTitle(R.string.alert_dialog_text_entry)
                .setView(textEntryView)
                .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {

                     string = uetd.getText().toString() + ":" + petd.getText().toString(); /////producing error
                    }
                })
                .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {

                        /* User clicked cancel so do some stuff */
                    }
                })
                .create();

public class listdemo extends ListActivity {
    /** Called when the activity is first created. */
    private static final int DIALOG_TEXT_ENTRY = 7;
    EditText uetd;
    EditText petd;
    SharedPreferences.Editor editor;
    String string;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);
     uetd=(EditText)findViewById(R.id.username_edit);
      petd=(EditText)findViewById(R.id.password_edit);
lv.setOnItemClickListener(new OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

    showDialog(DIALOG_TEXT_ENTRY);
}
        });
}
}

Ответы [ 2 ]

3 голосов
/ 17 сентября 2012

Вместо немедленного возврата диалога с возвратом нового AlertDialog.builder .... и так далее ... вам следует сохранить экземпляр диалога, создав переменную класса, как это

AlertDialog dialog;

Тогда вы можете легко получить доступ к представлениям диалога в обратном вызове диалога:

dialog.findViewById(R.id.username_edit);

Вы должны сделать это, потому что при создании обратного вызова он каким-то образом создает новый класс в памяти, поэтому при непосредственном вызове findViewById () он не может найти действие

0 голосов
/ 12 января 2011

попробуйте этот код

 uetd=(EditText) textEntryView.findViewById(R.id.username_edit);

после следующей строки в вашем коде

final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...