Редактируемый ListView

Интерфейс, диалоги, темы, стили, меню
Ответить
Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Редактируемый ListView

Сообщение Tamachi » 27 авг 2013, 16:41

Хочу сотворить редактируемый ListView. То есть, такой список, в котором в каждой строке было по EditText.

Пробовал делать это на базе SimpleAdapter. Задал свой шаблон для элемента списка.

В результате: шаблон отображается в списке правильно, но при попытке ввода чего-нибудь в EditText, весь список перерисовывается.

Пробовал делать свой адаптер (наследник от SimpleAdapter), но тут проявились какие-то проблемы с курсором.
При вводе текста курсор постоянно в самом левом положении.

Чего-то мне кажется, что SimpleAdapter не ориентирован на работу с элементами редактирования.

Подскажите, я вообще на правильном пути?
Может надо другой адаптер использовать?



Вот код:

Код: Выделить всё

public class CommonDataAdapter extends SimpleAdapter {

    public static final String BEACON_PARAM_LABEL = "beacon_param_name";
    public static final String BEACON_PARAM_VALUE = "beacon_param_value";
    public static final String BEACON_PARAM_HINT  = "beacon_param_hint";

    private Context m_context;
    private final LayoutInflater m_inflater;
    private List<? extends Map<String, ?>> m_data;
    private int m_resource;

    //private static final int param_layout = R.layout.beacon_param;

    public CommonDataAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        m_context = context;
        m_inflater = LayoutInflater.from(m_context);
        m_data = data;
        m_resource = resource;
    }





    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        View view = convertView;
        if (view==null) {
            view = m_inflater.inflate(m_resource, parent, false);
        }


        if (!m_data.get(position).equals(null)) {

            final EditText param_value_editor = (EditText)view.findViewById(R.id.param_value);
                param_value_editor.setTag(position);
                String val = m_data.get(position).get(BEACON_PARAM_VALUE).toString();
                param_value_editor.setText(val);
                String hint = m_data.get(position).get(BEACON_PARAM_HINT).toString();
                param_value_editor.setHint(hint);


            param_value_editor.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    Map<String, String> m = (Map<String, String>)m_data.get(position);
                    if (!m.equals(null)) {
                        String dta = s.toString();
                        if (!m.get(BEACON_PARAM_VALUE).toString().equals(dta)) {
                            ((Map<String, String>)m_data.get(position)).put(BEACON_PARAM_VALUE, dta);

                            if (!param_value_editor.getText().equals(dta)) {
                                param_value_editor.setText(dta);
                                //param_value_editor.moveCursorToVisibleOffset();
                            }
                        }

                    }
                }

                @Override
                public void afterTextChanged(Editable editable) {

                }
            });





        } else {
            return null;
        }
        return view;
    }
}

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Редактируемый ListView

Сообщение KamiSempai » 27 авг 2013, 17:35

Не стоит использовать EditText в ListView. Описанные проблемы - это еще одна беда.
Их там целая куча. Если сделать, что бы все работало, Активность будет из одних костылей состоять.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Редактируемый ListView

Сообщение rezak90 » 27 авг 2013, 17:50

я бы использовал textview вместо edittext'a, а редактирование вынес бы в editmode actionbar'a
R.id.team
Политика на форуме запрещена

Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Re: Редактируемый ListView

Сообщение Tamachi » 27 авг 2013, 19:24

rezak90 писал(а):я бы использовал textview вместо edittext'a, а редактирование вынес бы в editmode actionbar'a
Неинтуитивно получится.

В каких приложениях подобное уже используется?

Кстати, что за "editmode"?
Не нашёл в описании ActionBar ничего похожего на EditMode!!!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Редактируемый ListView

Сообщение rezak90 » 27 авг 2013, 20:05

Tamachi писал(а):Кстати, что за "editmode"?
Не нашёл в описании ActionBar ничего похожего на EditMode!!!
ну ошибся, не EditMode a ActionMode
R.id.team
Политика на форуме запрещена

Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Re: Редактируемый ListView

Сообщение Tamachi » 27 авг 2013, 21:13

rezak90 писал(а):
Tamachi писал(а):Кстати, что за "editmode"?
Не нашёл в описании ActionBar ничего похожего на EditMode!!!
ну ошибся, не EditMode a ActionMode
Спасибо!

Но это не совсем то, что хотелось бы.

Надо бы придумать так, чтобы пользователь заполнял анкету из N строк.
Например:
Имя -- Иван
Фамилия -- Петров
Волшебная крякозябра -- vdkfldfkdflgjdfkgjdfkgjdf

И после того как все это введено надо нажать кнопку "ГОТОВО".

Вместо "Имя-ФамилияВолшебная крякозябра" может быть что угодно. И скорее всего количество строк будет значительно больше чем 3. Поэтому решил делать это в виде ListView. А выяснилось, чт Андроид такую конструкцию
(Блин! Простейшую анкету!) не поддерживает.


Хотелось бы чтобы было в рамках ListView (чтобы можно было пролистывать). Пробовал ScrollView, но тоже весьма глючная штука получается.

Выносить редактирование в ActionBar -- тоже нехорошо:
получается, что пользователь редактирует текст в ActionBar и завершает редактирование нажатием на "галочку" -- и так для каждой строки. А потом ещё надо будет кнопку "ГОТОВО" нажать.

По-моему, тут слишком много пасов для пользователя.


Шо делать-то?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Редактируемый ListView

Сообщение rezak90 » 27 авг 2013, 21:20

сделать TextView обычные в ListView, нажатием на item of ListView вылазит диалог в котором и происходит редактирование - нажимаем кнопочку ОК и редактирование принимается
R.id.team
Политика на форуме запрещена

Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Re: Редактируемый ListView

Сообщение Tamachi » 27 авг 2013, 21:46

rezak90 писал(а):сделать TextView обычные в ListView, нажатием на item of ListView вылазит диалог в котором и происходит редактирование - нажимаем кнопочку ОК и редактирование принимается
Ну, собственно, так оно сейчас и есть. Но это оно и у всех есть. Но неужели для такой популярной задачи
это единственный допустимый шаблон? Как-то обидно, получается. Сплошные ограничения!

Мне дизайнер нарисовал картинку, а андроид, получается, не любую картинку отобразить может!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Редактируемый ListView

Сообщение rezak90 » 27 авг 2013, 21:50

Tamachi писал(а):Мне дизайнер нарисовал картинку, а андроид, получается, не любую картинку отобразить может!
прежде чем рисовать картинку дизайнер должен знать андроид, или же ты должен объяснить какой дизайн нужен... дело здесь не в андроиде, просто такая схема которую ты описываешь не логична с точки зрения реализации и удобства пользователя именно для смартфонов
R.id.team
Политика на форуме запрещена

Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Re: Редактируемый ListView

Сообщение Tamachi » 27 авг 2013, 23:27

rezak90 писал(а):
Tamachi писал(а):Мне дизайнер нарисовал картинку, а андроид, получается, не любую картинку отобразить может!
прежде чем рисовать картинку дизайнер должен знать андроид, или же ты должен объяснить какой дизайн нужен... дело здесь не в андроиде, просто такая схема которую ты описываешь не логична с точки зрения реализации и удобства пользователя именно для смартфонов
Почему это схема, представляющая собой несколько EditText в рамках одного ListView нелогична?
IMHO, самое то для смартфонов.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Редактируемый ListView

Сообщение rezak90 » 27 авг 2013, 23:31

как по твоему касания должны отлавливаться если на себя берёт фокус одновременно два View: EditText и ListView? кто из них будет контроль брать на себя? как система поймёт листаешь ты вниз или обращаешься к EditText?
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Редактируемый ListView

Сообщение Foenix » 28 авг 2013, 00:22

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

что до того, что "самое оно для смартфонов" прошерсти сайт девелопер-андроид, там все по интерфейсу есть, что принято, что не принято..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Редактируемый ListView

Сообщение KamiSempai » 28 авг 2013, 00:43

rezak90 писал(а):как по твоему касания должны отлавливаться если на себя берёт фокус одновременно два View: EditText и ListView? кто из них будет контроль брать на себя? как система поймёт листаешь ты вниз или обращаешься к EditText?
Пожалуй это самый весомый аргумент. Помнится, только начинал изучать андроид, ViewPager-а еще не было и я пытался вставить ListView внутрь Galery. Там аналогичная проблема.
Что самое интересное, мне это удалось, но мучался я долго.

А через пару недель вышел ViewPager :lol:
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Volha
Сообщения: 61
Зарегистрирован: 20 авг 2012, 17:39

Re: Редактируемый ListView

Сообщение Volha » 28 авг 2013, 11:05

Кажется, меня сейчас начнут пинать ногами, но в моём приложении пользователю тоже надо заполнять анкету, а число полей в ней - переменная величина. Я использовала scrollView =) Посмотреть можно в viewtopic.php?f=50&t=2376
Всё совсем плохо? Как надо было делать по-другому? Варианты с actionBar и всплывающими диалогами мне тоже кажутся слишком громоздкими.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Редактируемый ListView

Сообщение klblk » 28 авг 2013, 12:21

Volha писал(а):Кажется, меня сейчас начнут пинать ногами, но в моём приложении пользователю тоже надо заполнять анкету, а число полей в ней - переменная величина. Я использовала scrollView =) Посмотреть можно в viewtopic.php?f=50&t=2376
Всё совсем плохо? Как надо было делать по-другому? Варианты с actionBar и всплывающими диалогами мне тоже кажутся слишком громоздкими.
Думаю, что я бы сделал также.

Tamachi
Сообщения: 203
Зарегистрирован: 17 апр 2013, 00:08

Re: Редактируемый ListView

Сообщение Tamachi » 28 авг 2013, 14:32

Foenix писал(а):и при этом, что я больше всего ненавижу, будет прыгать как бешеная клавиатура.

что до того, что "самое оно для смартфонов" прошерсти сайт девелопер-андроид, там все по интерфейсу есть, что принято, что не принято..
Все что нарисовано программистами гугля (например, GMail) имеет настолько убогий вид и настолько неинтуативное управление, что мне не хотелось бы повторять их. Поэтому "Правила хорошего тона" от Google -- это в моем понимании --правила, как НЕ надо себя вести.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Редактируемый ListView

Сообщение Foenix » 28 авг 2013, 18:30

Для того, чтобы нарушать правила, нужно делать это сознательно, а значит, нужно с ними вначале хорошенько ознакомиться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

jajnky
Сообщения: 1
Зарегистрирован: 23 дек 2020, 23:12

Re: Редактируемый ListView

Сообщение jajnky » 23 дек 2020, 23:14

What you learn from playing toca life world is the same thing that you can learn while playing Blood 2. It is essentially a carbon copy of the game. Even though they spruced it up a bit with new graphics and a brand new soundtrack, the gameplay is still the exact same. I am not saying that you don’t need to play it because you have already played the original version, the new one is still fun to play and it takes you back to the good old days when you played the first game. If you really want a new game to play, you can try among us pc. Maybe that game is more your speed.

Ответить