С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Передать dialogInterface во View - Программирование Android

25.08.2016, 18:06. Просмотров 209. Ответов 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();
0
Миниатюры
Передать dialogInterface во View  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2016, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать dialogInterface во View (Программирование Android):

Передать через intent VIEW - Программирование Android
Как можно через intent передать "VIEW", полученное вот таким способом: View view = (View)findViewById(R.id.layout_linear); Передавая...

Как передать тег (view.setTag(holder) - Программирование Android
Здравствуйте! Использую адаптер и у меня он вида: class ItemAdapter extends BaseAdapter { private ImageLoadingListener...

Есть класс унаследованный от View - как туда передать данные? - Программирование Android
getIntent() не работает.

В чем разница (View view) и (View v) - Программирование Android
Я только начинаю изучать программирование под андроид (до этого вобще программированием не занимался), по гуглу удалось найти только...

View вытесняет другое view из activity - Программирование Android
После второго EditText должна располагаться кнопка. Но почему-то этот второй EditText выпихивает ее из activity. Что не так?

Public void onClick(View view) - Программирование Android
Не работает public void onClick(View view) :wall: public class MainActivity extends AppCompatActivity implements View.OnClickListener...

2
vxg
Модератор
3189 / 1992 / 228
Регистрация: 13.01.2012
Сообщений: 7,712
25.08.2016, 18:16 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
MaFa23, воткните в статику активити - криминала нет ведь активити в любом случае существует до диалога
1
fraley
106 / 106 / 40
Регистрация: 24.05.2015
Сообщений: 322
25.08.2016, 20:08 #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>
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2016, 20:08
Привет! Вот еще темы с ответами:

Как передать параметры из одного View в EditorFor другого View - C# MVC
Здравствуйте. Есть 2 view, первое просто отображает данные, 2 должно их редактировать, в 1 view есть текст, необходимо передать этот текст...

Можно ли передать несколько View во View - C# MVC
Вопрос новичка можно ли передать несколько View во View ? Дело в том что мне нужно передать перечисление одной таблицы во View и...

Передать dynamic во View - C# MVC
Случилось горе на мою голову... Мне надо передать динамик тип во Вью, но я не знаю как, помогите пожалуйста. Есть вот такой метод, в...

Как в View передать List<> - C# MVC
Есть модель: public class Meny_dataModel { public string title { get; set; } public string metod { get; set; } ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.