Intereting Posts
IBM Worklight – Как включить отладку WebView в Android? Добавить фильтры в видео, такие как Instagram Разрешить только iphone / ipad / ipod / android для доступа к файлам в directoy, все остальные перенаправляются на google.com Как проверить, включена ли батарея для Android Lollipop Как я могу опубликовать свое приложение на рынке приложений на мозге? Андроид Фрагмент и изменение ориентации, вызывающие: IllegalStateException: Не удается выполнить это действие после onSaveInstanceState Отправьте ссылку на группу whatsapp непосредственно из браузера (или из приложения) Android – Извлечение текста из SMS Page curl with view pager Android. ART для оптимизации цикла. Простая java-функция с неожиданным результатом Различать одиночные диалоги с помощью DialogInterface.OnClickListener Получите высоту виртуальной клавиатуры в Android Android-эквивалент getActivity () из / в ActionBarActivity Каково расстояние между 2 или более плавающей кнопкой действия? Как сделать, чтобы моя карта Google увеличила масштаб до моего текущего местоположения?

ConvertView теряет onitemClick после прокрутки спискаView

У меня немного странная ошибка здесь, на моем адаптере. Представление, которое создает адаптер, – это миниатюра с левой стороны и таблица с несколькими строками. Каждая строка имеет два текстовых изображения.

В одном из текстовых представлений есть android:autoLink="web" свойство set и listview имеют onItemClickListener на нем.

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

Позвольте мне пояснить на примере:

  • View1, view2, view3 и view4 находятся в списке на экране.
  • View2 имеет ссылку, и она появляется, а onClick открывается ссылка.
  • Щелчок элемента работает нормально для view1, view 3 и view4.
  • Прокрутите список, а view1 преобразуется в позицию5, а затем view2 преобразуется в позицию6.
  • Элемент в позиции6 не содержит ссылки, но onItemClick также не запускается для элемента position6.

Функция автолинка textview, безусловно, меняет что-то с моим макетом, но я не знаю, что. Должно быть свойство, которое я могу сбросить для каждого вызова getView на моем адаптере, но что?

Спасибо за любую помощь.

редактировать

Давайте посмотрим какой-то код, это довольно стандартная / хорошая практика. GetView из моего адаптера: @Override public View getView (int position, View convertView, родительская группа ViewGroup) {

  // Inflate a new layout if needed if (convertView == null) convertView = createNewView(); // Gets the item from my array AGplus item = (AGplus) getItem(position); // Gets the holder pointing to the views Holder h = (Holder) convertView.getTag(); // That's a test version, I won't be using date.toString() later on h.date.setText(new Date(item.getDate()).toString()); // This guys is giving me a headache, // If it parses the link, I can't never click on this convertView anymore, // event re-converting them for a text that does not contain links h.txt.setText(item.getTitle()); // some image download stuff that doesn't matter for this code return convertView; } 

Что используемые макеты – это изображение и таблица, а количество строк, которые я раздуваю и вставляю в таблицу, зависит от каждого адаптера. Макет таблицы представляет собой горизонтальную линейную компоновку с изображением и макетом таблицы с некоторым запасом, и вот макет строки:

  <?xml version="1.0" encoding="utf-8"?> <TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@color/text" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:autoLink="web" android:text="" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@color/text" /> </TableRow> 

Если я полностью удалю android:autoLink="web" я получаю все клики, но, как указано ранее, после того, как представление получило «авто-связь», а затем я переработал это представление, я не могу снова получить клики на этом представлении.

редактировать

И вот макет инфляции:

  private View createNewView() { // Instantiate view View v = getLayoutInflater().inflate(R.layout.expandable_child_view, null); TableLayout table = (TableLayout) v.findViewById(R.id.table); Holder h = new Holder(); v.setTag(h); // Instantiate rows h.thumb = (ImageView) v.findViewById(R.id.img); h.date = (TextView) createNewRow(table, "Date: "); h.txt = (TextView) createNewRow(table, "Text: "); return v; } private View createNewRow(ViewGroup group, String title) { View row; row = getLayoutInflater().inflate(R.layout.item_table_row, null); ((TextView) row.findViewById(R.id.title)).setText(title); group.addView(row); return row.findViewById(R.id.text); } 

И прежде чем кто-то еще спросит, это макет expandable_child_view:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/frame" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:layout_marginLeft="40dp" android:layout_marginRight="5dp" android:layout_marginTop="20dp" android:src="@drawable/ic_launcher" /> <TableLayout android:id="@+id/table" android:layout_width="match_parent" android:layout_height="match_parent" > </TableLayout> </LinearLayout> 

Как я уже говорил, просто линейная компоновка с изображением и таблицей и несколькими полями.

По словам Ромена Гая, это делается по дизайну для поддержки навигации трекбола / dpad. Комментарий 27 имеет обходной путь к нему, установив фокусность потомков для каждого элемента списка:

 setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 

или

 android:descendantFocusability="blocksDescendants" 

Кажется, я знаю, что может быть. Когда вы выполняете setText (), иногда он уничтожит много вещей. Возможно, вам придется использовать ClickableSpan, чтобы вернуть действие ссылки в текстовое окно.