07.06.2016, 15:13. Просмотров 724. Ответов 11
Добрый день!
Решил разработать свой простой диалог (универсальный отдельный класс) и многократно использовать его (вызывать) из разных Activity для разных нужд.
Так, чтобы можно было задавать заголовок, текст, иконку, названия кнопок, а не городить кучу однотипных диалогов с разными надписями на все случаи жизни.
Многочисленные примеры в интернете указывают что нужно делать так:
Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
public class MyAlertDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
public static final int RESULT_POSITIVE = 1;
public static final int RESULT_NEGATIVE = 2;
public static final int RESULT_NEUTRAL = 3;
public int resultDialog;
@Override
public Dialog onCreateDialog(Bundle saveInstanceState) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setCancelable(true)
.setTitle("Title тут")
.setNegativeButton("no", this)
.setPositiveButton("yes", this)
.setNeutralButton("neutral", this)
.setMessage("body msg");
adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked positive button
resultDialog = MyAlertDialogFragment.RESULT_POSITIVE;
dialog.cancel();
}
});
adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked positive button
resultDialog = MyAlertDialogFragment.RESULT_NEGATIVE;
dialog.cancel();
}
});
adb.setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked positive button
resultDialog = MyAlertDialogFragment.RESULT_NEUTRAL;
dialog.cancel();
}
});
return adb.create();
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
}
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
}
} |
|
Вызываю из другой Activity так:
Java |
1
2
3
4
5
6
7
| MyAlertDialogFragment D = new MyAlertDialogFragment();
FragmentManager fm = getSupportFragmentManager();
D.show(fm, "test dialog");
if (D.resultDialog == MyAlertDialogFragment.RESULT_POSITIVE) Log.d("text","Позитив");
if (D.resultDialog == MyAlertDialogFragment.RESULT_NEGATIVE) Log.d("text","Негатив");
if (D.resultDialog == MyAlertDialogFragment.RESULT_NEUTRAL) Log.d("text","Нейтрал"); |
|
Запускаем и видим вот что:
1) На строке
Java |
1
| D.show(fm, "test dialog"); |
|
происходит построение диалога - вызов MyAlertDialogFragment.onCreateDialog()
А почему-то не при создании моего класса - строке
Java |
1
| MyAlertDialogFragment D = new MyAlertDialogFragment() |
|
? - я ожидал что он сконструируется именно при создании.
Это нормально? Почему так, объясните в 2-х словах у кого опыт есть.
2) Нельзя из Activity перед открытием диалога настроить у него Title, text, icon, надписи на кнопках.
А мне это нужно, т.к. класс универсальный делаю.
Как бы его так модернизировать, чтобы перед show можно было настроить диалог?
3) Строка
Java |
1
| D.show(fm, "test dialog"); |
|
показывает диалог, НО не останавливает выполнение программы в моей Activity (не ждет пока юзер ответит Да/Нет/Не знаю) а идет на проверку результата выбора в диалоге.
Хотелось бы конечно не внутри класса MyAlertDialogFragment обрабатывать результат, а в вызывающем Activity, т.к. в разных случаях будет разная обработка.
Как тут лучше поступить?
Спасибо заранее за дельные советы.