Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
MaFa23
1 / 1 / 0
Регистрация: 12.12.2015
Сообщений: 27
#1

Передать dialogInterface во View - Android

25.08.2016, 18:06. Просмотров 151. Ответов 2
Метки нет (Все метки)

В AlertDialog через setView устанавливаю форму с полями. Нужно по нажатию кнопки при правильно заполненной форме закрыть диалог, а при ошибке сообщить об ошибке, не закрывая диалог. Проблема в том, что стандартные setPositiveButton и др. кнопки закрывают диалог в любом случае, даже если у них в onClick не прописано ни cancel(), ни dismiss(). Я поставил кнопку на view, но не знаю, как передать в неё dialogInterface, чтобы закрыть диалог по её нажатии
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
//View, передаваемый в диалог
final View adView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.house_info, null);
//кнопка проверки и сохранения данных
Button btnApplyHouse = (Button) adView.findViewById(R.id.btn_house_apply);
btnApplyHouse.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      //
      //Проверка текстовых полей формы, при ошибке выводится Toast и вызывается return
      //Если всё заполнено правильно, данные сохраняются, после чего нужно закрыть диалог
      //Для закрывания диалога сюда нужно передать dialogInterface
      //
   }
});
new AlertDialog.Builder(context)
.setCancelable(true)
.setIcon(R.mipmap.house)
.setTitle("Добавить дом")
.setNegativeButton("Закрыть", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialogInterface, int i) {
      dialogInterface.cancel();//Даже без этой строки кнопка закрывает диалог
   }
})
.setView(adView)
.create().show();
Миниатюры
Передать dialogInterface во View  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2016, 18:06     Передать dialogInterface во View
Посмотрите здесь:

Программное добавление View Android
Как передать тег (view.setTag(holder) Android
Android XML vs View
Отрисовка View Android
Передать через intent VIEW Android
Android Тип view
Скопировать view Android
Движение View Android
View во фрагментах Android
Android Сериализация View
Android Красивые View

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2860 / 1793 / 183
Регистрация: 13.01.2012
Сообщений: 6,776
25.08.2016, 18:16     Передать dialogInterface во View #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
MaFa23, воткните в статику активити - криминала нет ведь активити в любом случае существует до диалога
fraley
91 / 91 / 31
Регистрация: 24.05.2015
Сообщений: 261
25.08.2016, 20:08     Передать dialogInterface во View #3
Я сделал с тремя EditText, думаю остальные добавить не будет проблема.
Если мне не изменяет память, то такое решение poup window подсказал Паблито.
П.С. Для TextInputLayout нужно в gradle добавить compile 'com.android.support:design:24.2.0'

Popup Window:
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
public class PopupWindow {
 
    private static AlertDialog dialog;
    private static EditText edt_name;
    private static EditText edt_price;
    private static EditText edt_paid;
    private static ICommunicator listiner;
 
 
    public static AlertDialog create(final Context context) {
        final View view = View.inflate(context, R.layout.popup_window, null);
        dialog = new AlertDialog.Builder(context).setView(view).create();
        dialog.setCancelable(false);//Если не нужно модальное поведение диалога, удалить эту строку
        listiner =(ICommunicator) context;
        edt_name=(EditText)view.findViewById(R.id.edt_name);
        edt_price=(EditText)view.findViewById(R.id.edt_price);
        edt_paid=(EditText)view.findViewById(R.id.edt_paid);
        Button btn_add_house=(Button)view.findViewById(R.id.btn_add_house);
        Button btn_dismiss=(Button)view.findViewById(R.id.btn_dismiss);
 
        btn_dismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
 
        btn_add_house.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name=edt_name.getText().toString();
                String price=edt_price.getText().toString();
                String paid=edt_paid.getText().toString();
                if(TextUtils.isEmpty(name)||TextUtils.isEmpty(price)||TextUtils.isEmpty(paid)){
                    Toast.makeText(context, "Отсутствует один из параметров", Toast.LENGTH_SHORT).show();
                }
                else{
                    if(listiner !=null)
                        listiner.onResult(name,price,paid);
                    dialog.dismiss();
                }
            }
        });
        setStyle(dialog);
        return dialog;
    }
 
    private static void setStyle(AlertDialog dialog) {
        Window window = dialog.getWindow();
        WindowManager.LayoutParams wlp = window.getAttributes();
        wlp.gravity = Gravity.CENTER;
        window.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        window.setAttributes(wlp);
    }
 
    public interface ICommunicator {
        void onResult(String name, String price, String paid);
    }
}
Main activity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MainActivity extends AppCompatActivity implements PopupWindow.ICommunicator {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn=(Button)findViewById(R.id.btn);
 
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PopupWindow.create(MainActivity.this).show();
            }
        });
    }
 
    @Override
    public void onResult(String name, String price, String paid) {
        Toast.makeText(MainActivity.this, "Name:"+name+"\nPrice: "+price+"\nPaid:"+paid, Toast.LENGTH_SHORT).show();
    }
}
popup_window.xml

XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/rounded_popup_window"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:gravity="center"
        android:text="Добавить дом"/>
 
    <android.support.design.widget.TextInputLayout
        android:id="@+id/til_name"
        android:hint="Название"
        style="@style/MyTextInputLayout">
 
        <android.support.design.widget.TextInputEditText
            android:id="@+id/edt_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </android.support.design.widget.TextInputLayout>
 
    <android.support.design.widget.TextInputLayout
        android:id="@+id/til_price"
        android:hint="Цена"
        style="@style/MyTextInputLayout">
 
        <android.support.design.widget.TextInputEditText
            android:id="@+id/edt_price"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </android.support.design.widget.TextInputLayout>
 
    <android.support.design.widget.TextInputLayout
        android:id="@+id/til_paid"
        android:hint="Оплачено"
        style="@style/MyTextInputLayout">
 
        <android.support.design.widget.TextInputEditText
            android:id="@+id/edt_paid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </android.support.design.widget.TextInputLayout>
 
    <Button
        android:id="@+id/btn_add_house"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Добавить дом"/>
    <Button
        android:id="@+id/btn_dismiss"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Закрыть"/>
</LinearLayout>
rounded_popup_window.xml:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners
        android:bottomRightRadius="10dp"
        android:bottomLeftRadius="10dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />
    <solid android:color="@color/colorPrimary" />
    <stroke
        android:width="1dp"
        android:color="#EEEEEE"/>
    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />
</shape>
Yandex
Объявления
25.08.2016, 20:08     Передать dialogInterface во View
Ответ Создать тему
Опции темы

Текущее время: 03:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru