Я получил часть этого, чтобы работать. Проблема заключалась в использовании getApplicationContext()
. Android SDK состояния
Возвращает контекст одного глобального объекта Application текущего процесса.
Полагаю, этот контекст отличается от контекста фактической деятельности.
Таким образом, диалоговое окно отображается, когда я использую this
вместо getApplicationContext()
:
private OnlineActivities onlineActivities = new OnlineActivities();
new DoOnlineActivity(this).execute();
private class DoOnlineStuff extends AsyncTask<Void, Integer, Dialog> {
Context ctx;
Dialog dialog;
public DoOnlineActivity(Context ctx){
this.ctx = ctx;
}
@Override
protected Dialog doInBackground(Void... params) {
return onlineActivities.start(ctx);
}
@Override
protected void onProgressUpdate(Integer... progress) {
Log.v(RuntimeVars.getMyName(), "AsyncOnlineTask in progess");
}
@Override
protected void onPostExecute(Dialog result) {
if (result != null) {
dialog = result;
dialog.show();
}
}
}
НО: теперь кнопка, которую я создал в диалоге, ничего не сделает. Я полагаю, что OnClickListener()
в моем диалоге не отвечает в контексте моего основного интерфейса:
final View layout = View.inflate(ctx, R.layout.dialog_phonenumber_request, null);
((TextView) layout.findViewById(R.id.label)).setText(ctx.getString(R.string.dialog_insert_self_phonenumber_request_text1));
final EditText savedPhoneNumber = ((EditText) layout.findViewById(R.id.phonenum));
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setIcon(0);
builder.setTitle(ctx.getString(R.string.dialog_insert_self_phonenumber_request_title));
builder.setPositiveButton(ctx.getString(R.string.save),
new Dialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String toSavePhoneNumber = savedPhoneNumber.getText().toString().trim();
Database thisDBHandler = new Database(ctx);
thisDBHandler.open();
thisDBHandler.insertSetting(RuntimeVars.getDBPhoneNumberName(), toSavePhoneNumber);
thisDBHandler.close();
}
}
);
builder.setView(layout);
return builder.create();
Таким образом, последний шаг должен сказать OnClickListener()
, какой контекст использовать. Но как это можно сделать? new Dialog.OnClickListener()
не будет принимать никаких параметров о контексте?
Спасибо!
S.