Страница 1 из 1

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

Добавлено: 27 авг 2013, 16:41
Tamachi
Хочу сотворить редактируемый 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;
    }
}

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

Добавлено: 27 авг 2013, 17:35
KamiSempai
Не стоит использовать EditText в ListView. Описанные проблемы - это еще одна беда.
Их там целая куча. Если сделать, что бы все работало, Активность будет из одних костылей состоять.

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

Добавлено: 27 авг 2013, 17:50
rezak90
я бы использовал textview вместо edittext'a, а редактирование вынес бы в editmode actionbar'a

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

Добавлено: 27 авг 2013, 21:20
rezak90
сделать TextView обычные в ListView, нажатием на item of ListView вылазит диалог в котором и происходит редактирование - нажимаем кнопочку ОК и редактирование принимается

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

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

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

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

Добавлено: 27 авг 2013, 21:50
rezak90
Tamachi писал(а):Мне дизайнер нарисовал картинку, а андроид, получается, не любую картинку отобразить может!
прежде чем рисовать картинку дизайнер должен знать андроид, или же ты должен объяснить какой дизайн нужен... дело здесь не в андроиде, просто такая схема которую ты описываешь не логична с точки зрения реализации и удобства пользователя именно для смартфонов

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

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

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

Добавлено: 27 авг 2013, 23:31
rezak90
как по твоему касания должны отлавливаться если на себя берёт фокус одновременно два View: EditText и ListView? кто из них будет контроль брать на себя? как система поймёт листаешь ты вниз или обращаешься к EditText?

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

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

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

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

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

А через пару недель вышел ViewPager :lol:

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

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

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

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

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

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

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

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

Добавлено: 28 авг 2013, 18:30
Foenix
Для того, чтобы нарушать правила, нужно делать это сознательно, а значит, нужно с ними вначале хорошенько ознакомиться.

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

Добавлено: 23 дек 2020, 23:14
jajnky
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.