Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Sparrow44
26 / 28 / 5
Регистрация: 20.02.2012
Сообщений: 350
1

OnItemClickListener

23.02.2015, 15:26. Просмотров 465. Ответов 7
Метки нет (Все метки)

Необходимо при клике по Item ListView изменить этот итем, решил подменять его xml файл разметки. Завел массив
Java
1
boolean[] mExtendItem;
При клике по Item меняю
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
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        mFragment.onExtendedUpdate(RequestsFragment.ExtendedResult.Wait, position);
    }
 
public void onExtendedUpdate(ExtendedResult extendedResult, int position)
    {
        switch (extendedResult)
        {
            ...
            case Wait:
                listAdapter.setExtendedItem(position - 1, !listAdapter.getExtendedItem(position - 1));
                listAdapter.notifyDataSetChanged();
                break;
        }
    }
 
public void setExtendedItem(int position, boolean value)
    {
        mExtendedItem[position] = value;
    }
 
    public boolean getExtendedItem(int position)
    {
        return mExtendedItem[position];
    }
Но не происходит обновление ListView, что я делаю не так?

А да в методе getView это само собой обрабатывается
Java
1
2
3
4
5
6
7
8
9
10
public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if(!mExtendedItem[position])
       {
              ...
       }
       else
       {
             ...
       }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2015, 15:26
Ответы с готовыми решениями:

В ListView не работает OnItemClickListener
Здравствуйте, Впервые попался на такую проблему, что в ListView не работает OnItemClickListener....

Получить id вместо position в OnItemClickListener
Здравствуйте. Хотел для себя создать справочник, для чего в сети нашел пример, который я немного...

Получить из ListView адаптера значение в OnItemClickListener
В OnItemClickListener передается заполненый адаптер и номер позиции. Как вытянуть из него значение...

Не могу заставить OnItemClickListener, ловить нажатие на элемент списка ListView
Пишу простенькое приложение по сбору цен на разные товары, сейчас пытаюсь оптимизировать часть кода...


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

Или воспользуйтесь поиском по форуму:
7
dtx1212
6 / 6 / 3
Регистрация: 08.12.2013
Сообщений: 26
23.02.2015, 15:42 2
getView скинь полностью.
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.02.2015, 15:52 3
Цитата Сообщение от Sparrow44 Посмотреть сообщение
что я делаю не так?
.|
\/
Цитата Сообщение от Sparrow44 Посмотреть сообщение
решил подменять его xml файл разметки
0
Sparrow44
26 / 28 / 5
Регистрация: 20.02.2012
Сообщений: 350
23.02.2015, 16:08  [ТС] 4
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
public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
 
        if(!mExtendedItem[position]) {
             view = inflater.inflate(R.layout.request_list_item, parent, false);
            ((TextView) view.findViewById(R.id.from_request)).setText(текст);
            ((TextView) view.findViewById(R.id.where_request)).setText(текст);
            view.setTag(position);
        }
        else
        {
            view = inflater.inflate(R.layout.frame_request, parent, false);
            TextView mFrom = (TextView)view.findViewById(R.id.frame_from);
            TextView mWhere = (TextView)view.findViewById(R.id.frame_where);
            TextView mPrice = (TextView)view.findViewById(R.id.frame_price);
            TextView mTelephone = (TextView)view.findViewById(R.id.frame_telephone);
            TextView mName = (TextView)view.findViewById(R.id.frame_client);
            TextView mTime = (TextView)view.findViewById(R.id.frame_time);
            view.setTag(position);
 
            ((LinearLayout)view.findViewById(R.id.frame_info)).setVisibility(View.VISIBLE);
            ((LinearLayout)view.findViewById(R.id.frame_button)).setVisibility(View.VISIBLE);
 
           ...Заполняем TextView.
 
            final Button wait = (Button)view.findViewById(R.id.frame_wait);
            wait.setTag(position);
            wait.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mFragment.onExtendedUpdate(RequestsFragment.ExtendedResult.Wait, (int)v.getTag());
                    notifyDataSetChanged();
                }
            });
        }
 
        return view;
    }
Добавлено через 48 секунд
Цитата Сообщение от Armagedo Посмотреть сообщение
Сообщение от Sparrow44
что я делаю не так?
.|
\/
Сообщение от Sparrow44
решил подменять его xml файл разметки
А что тут не так?

Добавлено через 5 минут
Сейчас попробовал не подменять xml файл Item'a, просто скрывать не нужные элементы. Работает иногда, но не всегда почему то. Просто событие клика не вызывается и все не совсем понимаю почему это.
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.02.2015, 17:10 5
Цитата Сообщение от Sparrow44 Посмотреть сообщение
А что тут не так?
Ну, без кода было непонятно, что вы понимаете под "подменять его xml файл разметки".
Я уж грешным делом решил, что вы там программно пытаетесь переписывать сам XML файл

Добавлено через 20 минут
Что подразумевалось дожен делать вот этот код?

Java
1
2
3
4
5
6
 wait.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mFragment.onExtendedUpdate(RequestsFragment.ExtendedResult.Wait, (int)v.getTag());
                    notifyDataSetChanged();
                }
Добавлено через 1 минуту
Я к чему...к тому что достучаться до этого "слушателя" можно тольо со второго клика по элементу списка...
Ну, насколько я помню свои эксперименты...
0
Sparrow44
26 / 28 / 5
Регистрация: 20.02.2012
Сообщений: 350
23.02.2015, 20:51  [ТС] 6
Цитата Сообщение от Armagedo Посмотреть сообщение
Что подразумевалось дожен делать вот этот код?
Этот код должен вызвать метод из "родительского" фрагмента, к которому принадлежит ListView. Вот этот
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void onExtendedUpdate(ExtendedResult extendedResult, int position)
    {
        switch (extendedResult)
        {
            ...
            case Wait:
                listAdapter.setExtendedItem(position - 1, !listAdapter.getExtendedItem(position - 1));
                listAdapter.notifyDataSetChanged();
                break;
        }
    }
public void setExtendedItem(int position, boolean value)
    {
        mExtendedItem[position] = value;
    }
 
    public boolean getExtendedItem(int position)
    {
        return mExtendedItem[position];
    }
Цитата Сообщение от Armagedo Посмотреть сообщение
Я к чему...к тому что достучаться до этого "слушателя" можно тольо со второго клика по элементу списка...
Ну, насколько я помню свои эксперименты...
Это почему так? Я вот что то тоже не совсем понимаю в чем тут проблемы возникают.
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.02.2015, 21:09 7
Цитата Сообщение от Sparrow44 Посмотреть сообщение
Этот код должен вызвать метод из "родительского" фрагмента, к которому принадлежит ListView. Вот этот
Ну, это-то я понял - чай глаза есть
Я имел в виду - что он должен делать, если рассказать "по-человечески"
И что он именно в кнопке забыл?

Ну, то такое

Цитата Сообщение от Sparrow44 Посмотреть сообщение
Это почему так?
Проверьте
Вкиньте два Toast - один в onItemClick, второй в onClick кнопки - они всё расскажут

P.S. Кстати, зачем вы на каждую новую кнопку цепляетенового слушателя с идентичным кодом?
Сделайте одного глобального слушателя и цепляйте его
0
Sparrow44
26 / 28 / 5
Регистрация: 20.02.2012
Сообщений: 350
23.02.2015, 22:13  [ТС] 8
Цитата Сообщение от Armagedo Посмотреть сообщение
Ну, это-то я понял - чай глаза есть
Я имел в виду - что он должен делать, если рассказать "по-человечески"
И что он именно в кнопке забыл?
В целом все выглядит примерно так:
Есть Item с краткой информацией, при клике по нему он отображает полную информацию (типа разворачивается) и также содержит три кнопки "Принять" "Отклонить" "Пропустить". Вот текущий код это для кнопки "Пропустить", по клику на нее Item должен снова сворачиваться(отображать краткую инфу)
0
23.02.2015, 22:13
Ответ Создать тему
Опции темы

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