Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
1

ListView не реагирует на нажатия

20.03.2017, 21:05. Просмотров 914. Ответов 4
Метки нет (Все метки)

Кинул на активность элемент ListView, присвоил ей кастомный адаптер и слой для элементов. В лист элементы добавляются, отображаются исправно, но они некликабельны. При нажатии на элемент нет системной анимации, а OnItemClickLisntener ничего не ловит. Как быть?
Xml-код листа:
XML
1
2
3
4
5
6
7
    <ListView
        android:id="@+id/list_todo"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="0dp" />
Xml-код элементов:
XML
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
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
 
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="9"
            android:orientation="vertical">
 
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="4"></LinearLayout>
 
            <TextView
                android:id="@+id/todo_head"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="2dp"
                android:layout_marginTop="2dp"
                android:layout_weight="3"
                android:gravity="bottom"
                android:text="Это всё"
                android:textColor="@android:color/black" />
 
        </LinearLayout>
 
        <Switch
            android:id="@+id/statement"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            android:layout_marginEnd="0dp"
            android:layout_weight="1"
            android:gravity="right" />
 
    </LinearLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="22dp">
 
        <TextView
            android:id="@+id/todo_body"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="2dp"
            android:layout_marginTop="2dp"
            android:text="Будет выглядеть вот так рас рас рас рас рас рас рас"
            android:textColor="@android:color/black"
            android:textSize="12sp" />
 
    </LinearLayout>
 
</LinearLayout>
Адаптер:
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
public class ToDoItemDescr extends To_Do_Manager {//отдельный java-файл
    String item_header;
    String item_body;
    boolean item_status;
    int item_id;
 
    ToDoItemDescr(String _item_header, String _item_body, boolean _item_status, int _item_id) {
        item_header = _item_header;
        item_body = _item_body;
        item_status = _item_status;
        item_id = _item_id;
    }
}
 
public class ToDoAdapter extends BaseAdapter {
    Context cont;
    LayoutInflater inflater;
    ArrayList<ToDoItemDescr> item_parts;
 
    ToDoAdapter(Context context, ArrayList<ToDoItemDescr> items) {
        cont = context;
        item_parts = items;
        inflater = (LayoutInflater) cont.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
    }
    public int getCount() {
        return item_parts.size();
    }
 
    public Object getItem (int pos) {
        return item_parts.get(pos);
    }
 
    public long getItemId(int pos) {
        return pos;
    }
 
    public View getView(int pos, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.todo_list_item_try_1, parent, false);
        }
 
        ToDoItemDescr did = getToDoItem(pos);
 
        ((TextView) view.findViewById(R.id.todo_head)).setText(did.item_header);
        ((TextView) view.findViewById(R.id.todo_body)).setText(did.item_body);
        ((Switch) view.findViewById(R.id.statement)).setChecked(did.item_status);
 
        return view;
    }
 
    ToDoItemDescr getToDoItem(int pos) {
        return ((ToDoItemDescr) getItem(pos));
    }
 
}
Слушатель кликов:
Java
1
2
3
4
5
6
7
8
    protected void On_ToDo_List_Click (View v) {
        list_todo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.w(LOG_TAG, "Я поймал твой клик.");
            }
        });
    }
Слушатель назначается в onCreate.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2017, 21:05
Ответы с готовыми решениями:

Обработчик нажатия на ListView
Добрый день, перерыл много сайтов, но ответ все же не нашел. Проблема в следующем. У меня имеется...

Обработка нажатия CheckBox в ListView
Привет, Есть ListView на основе BaseAdapter. Каждый элемент содержит TextView и несколько...

ListView подключение обработчика нажатия
Собственно есть ListView, который отображает одну из двух таблиц: switch (tekzakladka){...

Перестали происходить нажатия на ListView
Кто не спит, помогите как можно скорее. Есть ListView. вроде ничего не трогал, но перестало...

Кнопка в listView и обработчик нажатия
Здравствуйте.Помогите пожалуста. Есть список ListView обрабатываю нажатие элемента из списка вот...

4
leonardo666
3 / 3 / 0
Регистрация: 16.09.2016
Сообщений: 142
21.03.2017, 05:13 2
Здравствуйте. Судя по коду у вас слушатель в методе onClick а сам метод не привязан к listView но это и не надо. Слушатель надо прописать либо в onCreate либо в другом методе предшествующем появлению и отображению listView

Например:

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
Для клика по item
 
ваш listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adpv, View view, int position, long id) {
 
 
                       обработка
 
 
              }
        });
 
 
для удержания item
 ваш listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> ntlist, final View itv,
                                           final int pos, long id) {
 
                         обработка
 
return true;
            }
        });
0
MODifikaTOR18
0 / 0 / 1
Регистрация: 26.05.2016
Сообщений: 80
Завершенные тесты: 1
21.03.2017, 07:03  [ТС] 3
leonardo666, кроме слушателя, у меня проблема в том, что при простом клике на список нет анимации клика (Android 5.0 - расплывающийся круг). Т.е. список некликабелен при том, что это свойство я не изменял
0
shavuz
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
23.03.2017, 12:29 4
на всякий случай, скорее всего проблема не в этом, попробуй в хмл айтема в вьюшки вот это вписать
XML
1
2
3
android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"
Добавлено через 2 минуты
Цитата Сообщение от MODifikaTOR18 Посмотреть сообщение
protected void On_ToDo_List_Click (View v) {
* * * * list_todo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
* * * * * * @Override
* * * * * * public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
* * * * * * * * Log.w(LOG_TAG, "Я поймал твой клик.");
* * * * * * }
* * * * });
* * }
а и что это такое? почему в какой то функци которая судя по названию тоже какой то клик вы назначаете клик листенер лист вью?
0
leonardo666
3 / 3 / 0
Регистрация: 16.09.2016
Сообщений: 142
24.03.2017, 09:01 5
Так я же об это и сказал тоже, получается по коду что бы setOnItemClickListener заработал получается надо вызвать клик.
0
24.03.2017, 09:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2017, 09:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

плохо реагирует на нажатия
обрабатываю нажатие кнопки. вроде от дребезга защитился. иногда сразу срабатывает, иногда несколько...

Список не реагирует на нажатия
При попытке выбора элемента списка программа вылетает(не зависает,а именно прерывается отладка),при...

KeyPressEvent не реагирует на нажатия стрелок
собственно говоря, обрабатываю события клавиш, всё кроме стрелок нормально выводится в qDebug()&lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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