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

Как запихнуть в DialogFragment список контролов? - Android

Восстановить пароль Регистрация
 
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 76
24.11.2014, 16:30     Как запихнуть в DialogFragment список контролов? #1
Хотя бы просто кнопок.В гугле из примеров,тупо только с надписями.Или у этой хрени функционала не больше чем у MessageBox , и потому это не реально ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
24.11.2014, 18:24     Как запихнуть в DialogFragment список контролов? #2
yotsi, откровенно говоря, многие тьюториалы делаются всякими бездельниками для галочки (с минимальным функционалом). Никаких взаимодействий активностей с фрагментами, проверок на падения обычно не предусмотрено. Реальные задачи не рассматриваются.
Давненько делал что-то подобное, но с PopupWindow. Может быть, поможет.
PopupWindow. Что осталось за кадром? (Tutorial)
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
25.11.2014, 00:36     Как запихнуть в DialogFragment список контролов? #3
yotsi,

так а что надо-то туда запихнуть?

1. Создаёшь layout с контролами, которые хочешь чтобы были отображены в диалоге.
2. Создаёшь класс наследующий DialogFragment
3. Перегружаешь метод onCreateView этого класса, где проводишь всякие манипуляции по inflate и прочему нужному
4. Ну и создаешь его и показываешь где-надо...

Например из того, что под рукой
1.
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp" >
 
    <EditText
        android:id="@+id/etEditBarcode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="XX999999999XX"
        android:maxLength="13"
     >
 
        <requestFocus />
    </EditText>
 
    <View
        android:layout_width="fill_parent"
        android:layout_height="2dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"
        android:background="#000000" >
    </View>
 
    <LinearLayout
        android:id="@+id/layout_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
 
        <Button
            android:id="@+id/cbSaveChanges"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:text="Save" />
 
        <Button
            android:id="@+id/cbCancelChanges"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:text="Cancel" />
    </LinearLayout>
 
</LinearLayout>
2.-3. Наследуешь и перегружаешь
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public class EDITBARDIALOG extends DialogFragment implements OnClickListener {
    
    private String barCodeNumber;
    private Button cbSaveChanges;
    private Button cbCancelChanges;
    private EditText etEditBarcode;
    
    EDITBARDIALOG(String barcode){
        barCodeNumber = barcode;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                  Bundle savedInstanceState) {
                getDialog().setTitle("Edit Barcode");
                View v = inflater.inflate(R.layout.edit_barcode_dialog, null);
                v.findViewById(R.id.cbCancelChanges).setOnClickListener(this);
                
                cbSaveChanges = (Button) v.findViewById(R.id.cbSaveChanges);
                cbCancelChanges = (Button) v.findViewById(R.id.cbCancelChanges);
                etEditBarcode = (EditText) v.findViewById(R.id.etEditBarcode); 
                
                cbSaveChanges.setOnClickListener(this);
                cbCancelChanges.setOnClickListener(this);   
               
               etEditBarcode.setFilters( new InputFilter[] 
                                        {new InputFilter.AllCaps(), 
                                        new InputFilter.LengthFilter(13)});
               
               etEditBarcode.setText(barCodeNumber);
                        
               etEditBarcode.addTextChangedListener (new TextWatcher(){
 
                    @Override
                    public void beforeTextChanged(CharSequence s,
                            int start, int count, int after) {
                        // TODO Auto-generated method stub
                        
                    }
 
                    @Override
                    public void onTextChanged(CharSequence s, int start,
                            int before, int count) {
                        // TODO Auto-generated method stub
                        
                    }
 
                    @Override
                    public void afterTextChanged(Editable s) {
                        // TODO Auto-generated method stub
                        cbSaveChanges.setEnabled(UTILS.checkBarCode(s.toString()));
                    }
 
                    
                    
                });
                
                return v;
              };
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String newBarCode = etEditBarcode.getText().toString(); 
        switch (v.getId()){
        case R.id.cbSaveChanges:
            if (newBarCode.compareTo(barCodeNumber)==0) 
                {
                    this.dismiss();
                    return;
                }
            DataLayer.UpdateBarcode(barCodeNumber, newBarCode);
            ((MainActivity) this.getActivity()).refreshListViewData();
            this.dismiss();
            break;
        case R.id.cbCancelChanges:
            this.dismiss();
            
        }
    }
}

4. Ну и там где надо создаешь экземпляр и показываешь (у меня из MainActivity (extends Activity) ):
Java
1
2
EDITBARDIALOG dlgEditBarDialog = new EDITBARDIALOG(barcodeValue);
dlgEditBarDialog.show(getFragmentManager(), "dlgEditBarDialog");
Вообщем, фактически ничем не отчается от работы с Activity.
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
25.11.2014, 09:50     Как запихнуть в DialogFragment список контролов? #4
Согласен с Armagedo, что отличий от фрагмента не много. Думаю, стоит добавить ещё несколько строк.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class SomeFragment extends DialogFragment {
    private String name;
 
    public SomeFragment() {
    }
 
    public static DialogFragment newInstance(String name) {
        DialogFragment fragment = new SomeFragment();
        Bundle args = new Bundle();
        args.putString("name", name);
        fragment.setArguments(args);
        return fragment;
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
        name = getArguments().getString("name");
    }
Вызывать стоит так:
Java
1
2
DialogFragment fragment = SomeFragment.newInstance("Оля");
fragment.show(getSupportFragmentManager(), SomeFragment.TAG);
yotsi
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 76
25.11.2014, 16:39  [ТС]     Как запихнуть в DialogFragment список контролов? #5
Через чур сложно как то((((((
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
25.11.2014, 16:43     Как запихнуть в DialogFragment список контролов? #6
Не переживай - мы за тебя уже и пожевали,и проглотили.
И не бери в голову всю эту ерунду - лучше смотри телевизор.
Впрочем, если ты знаешь более легкий способ, то, думаю, не только я, а и ребята из Гугл с удовольствием прочтут твои мысли
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2014, 18:03     Как запихнуть в DialogFragment список контролов?
Еще ссылки по теме:

Android Разные стили DialogFragment
Как передать данные из Fragments в DialogFragment Android
Особенности DialogFragment Android
Android DialogFragment и создание своего диалога
Перемещение DialogFragment Android

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

Или воспользуйтесь поиском по форуму:
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
28.11.2014, 18:03     Как запихнуть в DialogFragment список контролов? #7
Сегодня выяснил, что следует активнее использовать метод onAttach, если планируется взаимодействие DialogFragment с его Activity. А именно, иногда надо не забыть прописать такие строчки:
Java
1
2
3
4
5
6
7
8
9
10
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            this.activity = (MainActivity) activity;
            // Здесь же можно описать создание объектов, зависящих от контекста. Контекстом будет activity.
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " Not MainActivity class instance");
        }
    }
Пока не протестировал на нескольких устройствах, но надеюсь, что это решит проблему, когда некий объект переставал существовать и давал NullPointerException, потому что зависел от контекста, а MainActivity в тот момент могла уничтожиться.
Yandex
Объявления
28.11.2014, 18:03     Как запихнуть в DialogFragment список контролов?
Ответ Создать тему
Опции темы

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