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

Динамическое создание кастомного layout - Android

Восстановить пароль Регистрация
 
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
17.12.2014, 14:30     Динамическое создание кастомного layout #1
Всем здрасте. Столкнулся с такой проблемой. Стоит задача по нажатию на динамически созданный едит текст в леяуте (с едит текстом и кнопкой внутри) переходить на другой экран, там делать манипуляции с другими едит текстами и по клику на кнопку возвращаться обратно и заполнить кликнутый едит текст данными которые были введены на форме на которую переходили. Как такое сделать ? В голову не приходит ничего умного... Помогите пожалуйста.

Добавлено через 23 минуты
Вот так я создаю леяуты
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
final LinearLayout linear = (LinearLayout) findViewById(R.id.linear);
 
        addNewEditText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                View view = getLayoutInflater().inflate(R.layout.edittext_layout, null);
                AutoCompleteTextView text = (AutoCompleteTextView) view.findViewById(R.id.edittextWhere);
                text.setId(idCounter++);
                text.addTextChangedListener(OrderTaxiActivity.this);
                text.setOnClickListener(OrderTaxiActivity.this);
                linear.addView(view);
            }
        });
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
17.12.2014, 17:36     Динамическое создание кастомного layout #2
dajver, можно попробовать startActivityForResult. По-моему самое то.

Добавлено через 1 минуту
Или можно еще вместо второй активити (той где вводить данные для EditText'a) показывать диалог, при нажатии там кнопки вызывать метод активити, который обработает введенные данные.
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
18.12.2014, 12:28  [ТС]     Динамическое создание кастомного layout #3
Цитата Сообщение от Spelcrawler Посмотреть сообщение
dajver, можно попробовать startActivityForResult. По-моему самое то.
Там пример с одним едит текстом, а как мне это привязать к кликнутому едит тексту? Что бы по клику на едит текст данные по возвращению на активность писались в нужный едит текст?

Добавлено через 34 минуты
Разобрался

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AutoCompleteTextView selecteeelTextView;
@Override
    public void onClick(View v) {
        selecteeelTextView = (AutoCompleteTextView) v; // узнаю какой едит текст был кликнут
 
        Intent intent = new Intent(this, OrderWithMapActivity.class);
        startActivityForResult(intent, 1);
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data == null) { return; }
        String name = data.getStringExtra("data");
        selecteeelTextView.setText(name);
    }
Добавлено через 15 часов 15 минут
Еще один вопрос...

Теперь у меня стоит задача создать на другом экране такое же количество едит текстов сколько я создал на первом. То есть я насоздавал допустим 4 штуки, и по клику на кнопку я перехожу на другой экран и там эти же едит тексты с теми же данными что я заполнил в первом экране но немного в другом виде... То есть они выглядят иначе чем на первом экране.

Может кто знает как такое запилить?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 12:59     Динамическое создание кастомного layout #4
По разному можно. Например отправить List, каждый элемент которого - нужная инфа для создания эдит текста и для каждого элемента создать эдит текст.
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
18.12.2014, 13:54  [ТС]     Динамическое создание кастомного layout #5
А можете привести какой то туториал для примера? Или какой то кусок кода ? А то я не совсем понимаю как это сделать...
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 14:04     Динамическое создание кастомного layout #6
Примерно так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        Intent intent = new Intent(this, SecondActivity.class);
        List<String> strings = new ArrayList<>();
        strings.add(et1.getText());//Вместо String можно добавить что угодно, лишь бы этот класс реализовывал интерфейс Serializable.
        strings.add(et2.getText());
        ....
        intent.putExtra("strings", (java.io.Serializable) strings);
        startActivity(intent);
 
        //Во второй активити, в onCreate()
        List<String> strings = getIntent().getExtras().get("strings");
        for(String str : strings){
            EditText et = new EditText(this);
            et.setText(str);
            //И добавить этот EditText куда нужно.
        }
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
18.12.2014, 14:08  [ТС]     Динамическое создание кастомного layout #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Java
1
2
strings.add(et1.getText());//Вместо String можно добавить что угодно, лишь бы этот класс реализовывал интерфейс Serializable.
* * * * strings.add(et2.getText());
А если я не могу их вот так считывать? у меня если вы смотрели код выше реализует один едит текст, просто множит его... Или я что то не так понимаю?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 14:19     Динамическое создание кастомного layout #8
dajver, можно их при создании добавлять в List, можно из контейнера достать все виджеты которые в нем находятся, только если там разные виджеты (экземпляры разных классов) нужно еще отсеивать не эдит тексты. А если только они то можно так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        int childCount = container.getChildCount();
        List<EditText> eTexts = new ArrayList<>();
        for(int i = 0; i < childCount; i++){
            EditText currentEText = (EditText) container.getChildAt(i);
            eTexts.add(currentEText);
        }
        //Потом вместо обращения к каждому отдельно в цикле обходите и достаете из них то что нужно:
 
        Intent intent = new Intent(this, SecondActivity.class);
        List<String> strings = new ArrayList<>();
        for(EditText eText : eTexts){
            String text = String.valueOf(eText.getText());
            strings.add(text);
        }
        intent.putExtra("strings", (java.io.Serializable) strings);
        startActivity(intent);
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
18.12.2014, 23:59  [ТС]     Динамическое создание кастомного layout #9
Спасибо за ответ, но я сделал немного иначе чем вы сказали) Поговнокодил, но сделал так как понимаю и так работает как я хотел)
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
03.01.2015, 20:46  [ТС]     Динамическое создание кастомного layout #10
Возвращаясь к этой теме. Теперь у меня возник намного сложней вопрос...

Есть экран на котором динамически создаются кнопки к которым нужно привязать динамически создающийся список. И потом по нажатию на совершенно иную кнопку нужно создавать в активном списке записи.

То есть как должно работать:
Я значит захожу жму кнопку создать, дальше создается кнопка со списком в который я могу туда добавлять разные данные, жму далее, создается еще одна кнопка со списком, добавляю туда данные, потом хочу вернуться обратно на предыдущую кнопку, жму на нее и у меня отображается листвью привязанный к этой кнопке...

Собственно вопрос в том как привязать список к кнопке и заполнять каждый созданный список по отдельности разными данными?

Такое вообще можно сделать? Потому что мне кажется что нет) Мой мозг просто ломается от всего этого. В приложении скрин как это выглядит...
Миниатюры
Динамическое создание кастомного layout  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2015, 12:42     Динамическое создание кастомного layout
Еще ссылки по теме:

Динамическое создание элементов интерфейса Android
Android Программное создание layout и элементов
Android Добавить layout на layout
Динамическое создание интерфейса Android
Создание кастомного календаря с динамическими данными Android

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

Или воспользуйтесь поиском по форуму:
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
04.01.2015, 12:42  [ТС]     Динамическое создание кастомного layout #11
В общем немного поговнокодив вечером я все таки смог
Цитата Сообщение от dajver Посмотреть сообщение
привязать список к кнопке и заполнять каждый созданный список по отдельности разными данными
Но теперь встает вопрос как мне сделать что бы я мог по возвращению на нужный мне шаг изменять эти данные, удалять, добавлять ?) Вот сейчас у меня код выглядит так:
Кликните здесь для просмотра всего текста
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
82
83
public class RecTourFragment  extends Fragment {
 
    private int counter = 0;
    private List<ListView> allEds;
    private ListView list;
    private ArrayList<String> listItems;
    private ArrayAdapter<String> adapter;
 
    public RecTourFragment() { }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        final View rootView = inflater.inflate(R.layout.fragment_rec_tour, container, false);
 
        allEds = new ArrayList<ListView>();
 
        counter++;
        createButtons(rootView);
        createListView(rootView);
 
        Button nextBtn = (Button) rootView.findViewById(R.id.nextBtn);
        nextBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                counter++;
 
                createButtons(rootView);
                createListView(rootView);
            }
        });
 
        Button recBtn = (Button) rootView.findViewById(R.id.recBtn);
        recBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listItems.add("Audio- : " + counter);
                adapter.notifyDataSetChanged();
            }
        });
 
        return rootView;
    }
 
    private void createButtons(View view) {
        LinearLayout layout = (LinearLayout) view.findViewById(R.id.buttonsView);
        layout.setOrientation(LinearLayout.HORIZONTAL);
        Button btn = new Button(getActivity());
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(v.getId() == allEds.get(v.getId() - 1).getId()) {
                    for(int i = 0; i < allEds.size(); i++) {
                        allEds.get(i).setVisibility(View.GONE);
                    }
                    allEds.get(v.getId() - 1).setVisibility(View.VISIBLE);
                }
            }
        });
        btn.setId(counter);
        btn.setText("" + counter);
        layout.addView(btn);
    }
 
    private void createListView(View view) {
        LinearLayout layout = (LinearLayout) view.findViewById(R.id.listviewView);
        layout.setOrientation(LinearLayout.VERTICAL);
        list = new ListView(getActivity());
        list.setId(counter);
        allEds.add(list);
        layout.addView(list);
 
        listItems = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, listItems);
        list.setAdapter(adapter);
 
        for(int i = 0; i < allEds.size(); i++) {
            allEds.get(i).setVisibility(View.GONE);
        }
        list.setVisibility(View.VISIBLE);
    }
}


Пока что тут создается кнопка с списком, и создается массив в который заносим данные каждое нажатие на кнопку создать, но вот он создается, а когда я хочу отредактировать предыдущий список, то он не редактируется так как доступа к нему у меня нет... Может есть какое-то решение что бы можно было создавать массивы так что бы можно было возвращаться и редактировать их?
Yandex
Объявления
04.01.2015, 12:42     Динамическое создание кастомного layout
Ответ Создать тему
Опции темы

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