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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Sparrow44
26 / 26 / 1
Регистрация: 20.02.2012
Сообщений: 349
#1

OnItemClickListener - Android

23.02.2015, 15:26. Просмотров 400. Ответов 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
       {
             ...
       }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2015, 15:26     OnItemClickListener
Посмотрите здесь:

Android Получить id вместо position в OnItemClickListener
Получить из ListView адаптера значение в OnItemClickListener Android
В ListView не работает OnItemClickListener Android
Android Не могу заставить OnItemClickListener, ловить нажатие на элемент списка ListView

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dtx1212
6 / 6 / 1
Регистрация: 08.12.2013
Сообщений: 26
23.02.2015, 15:42     OnItemClickListener #2
getView скинь полностью.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.02.2015, 15:52     OnItemClickListener #3
Цитата Сообщение от Sparrow44 Посмотреть сообщение
что я делаю не так?
.|
\/
Цитата Сообщение от Sparrow44 Посмотреть сообщение
решил подменять его xml файл разметки
Sparrow44
26 / 26 / 1
Регистрация: 20.02.2012
Сообщений: 349
23.02.2015, 16:08  [ТС]     OnItemClickListener #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, просто скрывать не нужные элементы. Работает иногда, но не всегда почему то. Просто событие клика не вызывается и все не совсем понимаю почему это.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.02.2015, 17:10     OnItemClickListener #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 минуту
Я к чему...к тому что достучаться до этого "слушателя" можно тольо со второго клика по элементу списка...
Ну, насколько я помню свои эксперименты...
Sparrow44
26 / 26 / 1
Регистрация: 20.02.2012
Сообщений: 349
23.02.2015, 20:51  [ТС]     OnItemClickListener #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 Посмотреть сообщение
Я к чему...к тому что достучаться до этого "слушателя" можно тольо со второго клика по элементу списка...
Ну, насколько я помню свои эксперименты...
Это почему так? Я вот что то тоже не совсем понимаю в чем тут проблемы возникают.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
23.02.2015, 21:09     OnItemClickListener #7
Цитата Сообщение от Sparrow44 Посмотреть сообщение
Этот код должен вызвать метод из "родительского" фрагмента, к которому принадлежит ListView. Вот этот
Ну, это-то я понял - чай глаза есть
Я имел в виду - что он должен делать, если рассказать "по-человечески"
И что он именно в кнопке забыл?

Ну, то такое

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

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

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