Урок 54. Кастомизация списка. Создаем свой адаптер

Обсуждение уроков
Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 10:51

KamiSempai писал(а):
anber писал(а):Ок, согласен это дело вкуса. А что по поводу навешивания клик листенеров на кнопки внутри елемента списка...
Для такого дела, я давно написал абстрактный класс ContextedCursorAdapter. Остается только установить соответствующий листенер.
[syntax=java] public interface OnContextButtonClickListener {
public void onContextButtonClick(AdapterContextMenuInfo menuInfo);
}[/syntax]
а в чем преимущество перед стандартным?
[syntax=java5] yourButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Your code that you want to execute on this button click
}
}); [/syntax]
Хотя можно использовать facade чтобы скрыть всю эту логику обработчиков, вот только нафига...
Изображение

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение KamiSempai » 17 июл 2014, 11:22

anber писал(а):А более детальный пример кода как этот листенер применять можно?
Конечно.
Для удобства сделал интерфейс:[syntax=java]public interface IContextedAdapter {
public void setOnContextButtonClickListener(OnContextButtonClickListener onContextButtonClickListener);

public interface OnContextButtonClickListener {
public void onContextButtonClick(AdapterContextMenuInfo menuInfo);
}
}[/syntax]
Вот сам класс реализующий его:
[syntax=java]public abstract class ContextedCursorAdapter<Holder> extends CursorAdapter implements IContextedAdapter {
private LayoutInflater mInflater;
private int mLayoutId;
private int[] mContextButtons;
private OnContextButtonClickListener mOnContextButtonClickListener;

public ContextedCursorAdapter(Context context, Cursor cursor, int layout, int[] contextButtons, int flags) {
super(context, cursor, flags);
mInflater = LayoutInflater.from(context);
mLayoutId = layout;
mContextButtons = contextButtons;
onCursorChanged(cursor);
}

abstract Holder newHolder(View view);
abstract void bindHolder(Holder holder, Cursor cursor);

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mInflater.inflate(mLayoutId, parent, false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
ContextHolder contextHolder = (ContextHolder) view.getTag();
if(contextHolder == null) {
contextHolder = new ContextHolder();
contextHolder.viewHolder = newHolder(view);
view.setTag(contextHolder);
if(mContextButtons !=null) for(int id: mContextButtons) {
View contextButton = view.findViewById(id);
if(contextButton != null) {
contextButton.setOnClickListener(mContextButtonClickListener);
contextButton.setTag(contextHolder);
contextButton.setFocusable(false);
}
}
}
contextHolder.position = cursor.getPosition();
contextHolder.id = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));

bindHolder(contextHolder.viewHolder, cursor);
}

@Override
public Cursor swapCursor(Cursor cursor) {
Cursor res = super.swapCursor(cursor);
onCursorChanged(cursor);
return res;
}

@Override
public void setOnContextButtonClickListener(
OnContextButtonClickListener onContextMenuButtonClickListener) {
mOnContextButtonClickListener = onContextMenuButtonClickListener;
}

void onCursorChanged(Cursor newCursor) {

}

private OnClickListener mContextButtonClickListener = new OnClickListener() {
@Override
public void onClick(View viev) {
ContextHolder contextHolder = (ContextHolder) viev.getTag();
handleContextButtonClick(viev, contextHolder);
}
};

private void handleContextButtonClick(View targetView, ContextHolder contextHolder){
if(mOnContextButtonClickListener != null) {
AdapterContextMenuInfo menuInfo = new AdapterContextMenuInfo(targetView, contextHolder.position, contextHolder.id);
mOnContextButtonClickListener.onContextButtonClick(menuInfo);
}
}

class ContextHolder {
int position;
long id;
Holder viewHolder;
}
}[/syntax]
Как пользоваться:
[syntax=java]public class ImplOfContextedCursorAdapter extends ContextedCursorAdapter<ImplOfContextedCursorAdapter.ViewHolder> {

public ImplOfContextedCursorAdapter(Context context, Cursor cursor, int flags) {
super(context, cursor, R.layout.list_item_layout, new int[] {R.id.checkbox, R.id.contextButton}, flags);
}

@Override
ViewHolder newHolder(View view) {
return new ViewHolder(view);
}

@Override
void bindHolder(ViewHolder holder, Cursor cursor) {
// Биндим холдер
}

class ViewHolder {
public final TextView text1;
//.... перечень полей

public ViewHolder(View view) {
text1= (TextView) view.findViewById(R.id.text1);
// ....
}
}
}[/syntax]
Непосредственное применение:
[syntax=java] ImplOfContextedCursorAdapteradapter = new ImplOfContextedCursorAdapter(getActivity(), cursor, 0);
adapter.setOnContextButtonClickListener(this);

//...

@Override
public void onContextButtonClick(AdapterContextMenuInfo menuInfo) {
switch (menuInfo.targetView.getId()) {
case R.id.checkbox:
// Что-то делаем
break;
case R.id.contextButton:
// А можем и меню показать
PopupMenu menu = new PopupMenu(getActivity(), menuInfo.targetView);
menu.inflate(R.menu.context_menu);
menu.setOnMenuItemClickListener(...);
menu.show();
break;
default:
// ...
break;
}
}[/syntax]
altwin писал(а):а в чем преимущество перед стандартным?
Я могу легко получить position и id из AdapterContextMenuInfo.

PS: Жду критики.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 12:03

KamiSempai писал(а):
altwin писал(а):а в чем преимущество перед стандартным?
Я могу легко получить position и id из AdapterContextMenuInfo.
ну так можно использовать
[syntax=java5]
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//
}
});
[/syntax]
ну и опять же есть та же onListItemClick в listActivity, в которой также вся информация передается. Я просто пока вообще смысла не вижу...
Последний раз редактировалось altwin 17 июл 2014, 12:08, всего редактировалось 1 раз.
Изображение

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение KamiSempai » 17 июл 2014, 12:05

altwin писал(а):
KamiSempai писал(а):
altwin писал(а):а в чем преимущество перед стандартным?
Я могу легко получить position и id из AdapterContextMenuInfo.
ну так можно использовать
[syntax=java5]
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//
}
});
[/syntax]
Нельзя, если нужно отследить нажатие конкретного View в итеме.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 12:12

KamiSempai писал(а):
altwin писал(а):
KamiSempai писал(а):
altwin писал(а):а в чем преимущество перед стандартным?
Я могу легко получить position и id из AdapterContextMenuInfo.
ну так можно использовать
[syntax=java5]
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//
}
});
[/syntax]
Нельзя, если нужно отследить нажатие конкретного View в итеме.
В смысле нельзя? в onListItemClick как и в onItemClick передается position и id именно того элемента на который был клик, тач или любое событие. Можно даже тупо от сюда вернуть:
[syntax=java5]
private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
}
};
[/syntax]
этот обработчик при желании на все навешать можно...

P.S. просто я всегда склонялся к тому, что клик - это системное событие и обработанно должно быть системными средствами, любая логика обработки поверх - это уже mini framework поверх android framework и просто лишний уровень абстракции... Как я уже писал, если и пытаться реализовать своего рода фасад, т.е. доступ ко всему функционалу из одного объекта, то не методы переименовывать нужно, а делать wrapper логики в объект из которого уже обращаться к системе. Но такой объект должен содержать в себе весь функционал обработки эелементов доступных в activity (т.е. содержать в себе вызов конктрукторов button, textView и т.д.) и почти всегда будет излишним... в общем я к тому, что врятли в android нужно такое городить.... пока это костыль не совсем понятный, но опять же я вполне согласен с тем, что что -то могу не понимать или пропустить....
Да и опятьже... тут уже вылазят архитектурные костыли ООП java... я не могу создать статичный метод в интерфейсе... иначе было бы удобно к примеру в него забить onclick и все элементы содержащиеся в activity реализуя интерфейс имели бы этот метод, т.е. один статичный метод... Таким образом можно получить возможность одинаково звать textitem.onclick с тем же успехом, как и button.onclick, и все уже зависит от реализации... Но это же java :)
Изображение

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение anber » 17 июл 2014, 12:32

>>>Нельзя, если нужно отследить нажатие конкретного View в итеме.
>>>В смысле нельзя? в onListItemClick как и в onItemClick передается position и id именно того элемента на который был клик, тач или любое событие. Можно даже тупо от сюда вернуть:

в onListItemClick как и в onItemClick передается position и id именно того item на котором был клик.
Если был клик на кнопке внутри этого item то onItemClick вообще не вызовется.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение KamiSempai » 17 июл 2014, 12:34

altwin писал(а):В смысле нельзя? в onListItemClick как и в onItemClick передается position и id именно того элемента на который был клик, тач или любое событие. Можно даже тупо от сюда вернуть:
[syntax=java5]
private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
}
};
[/syntax]
этот обработчик при желании на все навешать можно...
Пример, Итем списка:[syntax=xml]<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />

</LinearLayout>[/syntax]Вопрос: Как отследить нажатие, не по всей строке, а по кнопкам button1 и button2? Причем мне нужно знать position и id строки на которой эта кнопка была нажата.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 12:43

anber писал(а):>>>Нельзя, если нужно отследить нажатие конкретного View в итеме.
>>>В смысле нельзя? в onListItemClick как и в onItemClick передается position и id именно того элемента на который был клик, тач или любое событие. Можно даже тупо от сюда вернуть:

в onListItemClick как и в onItemClick передается position и id именно того item на котором был клик.
Если был клик на кнопке внутри этого item то onItemClick вообще не вызовется.
вопрос решается элементарным добавлением - android:focusable="false"
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 12:44

KamiSempai писал(а): </LinearLayout>[/syntax]Вопрос: Как отследить нажатие, не по всей строке, а по кнопкам button1 и button2? Причем мне нужно знать position и id строки на которой эта кнопка была нажата.
сообщением выше ответил, добавить однин атрибут в xml::button ;)
Изображение

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение anber » 17 июл 2014, 12:47

кому добавить этот атрибут?
А увидел, xml::button
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение anber » 17 июл 2014, 12:49

Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение KamiSempai » 17 июл 2014, 12:59

anber писал(а):Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
У меня тоже.
Что-то altwin, последнее время, сам на себя не похож.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение Viewer » 17 июл 2014, 13:10

anber писал(а):Ок, согласен это дело вкуса. А что по поводу навешивания клик листенеров на кнопки внутри елемента списка и подгрузки изображений типа ImageLoader?
Ну про листинеры тут уже достаточно расписали, что касается подгрузки изображений тоже не вижу никаких трудностей чтобы реализовать его в ViewBinder:
[syntax=java]
private class ChViewBinder implements SimpleAdapter.ViewBinder {

@Override
public boolean setViewValue(View arg0, Object arg1, String arg2) {

switch (arg0.getId()) {

...
case R.id.ch_list_item_channel_icon:
ImageView image = (ImageView) arg0;
String urlImage = (String) arg1;//URL изображения передается адаптером во ViewBinder
if (urlImage != null && !"".equals(urlImage)) {

//Подгружаем изображения с помощью Universal Image Loader
getApplication()
.getImageLoader()
.displayImage(urlImage, new ImageViewAware(image,false));

} else {
image.setImageResource(R.drawable.def_icon);
}
...
}
}
[/syntax]

Код рабочий, картинки грузятся и кэшируются без всяких проблем, подтормаживаний не наблюдается, использовал его в одном из приложений
Последний раз редактировалось Viewer 17 июл 2014, 13:13, всего редактировалось 1 раз.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 13:11

KamiSempai писал(а):
anber писал(а):Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
У меня тоже.
Что-то altwin, последнее время, сам на себя не похож.
Можно я обоим в одном месте отвечу? :) На самом деле если бы вы не поленись использовать google, предположив, что проблема не во мне, то нашли бы хотя бы этот туториал: http://www.migapro.com/click-events-listview-gridview/ ;) :idea: Там секция Problem -схожа с вашей и решение показанно ... Даже не предположу, почему у вас не сработало, но помнится на stack overflow видел что -то подобное, думаю если поискать -впорос решиться, все таки вы оба уж точно не новички ;)
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 13:14

anber писал(а):Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
KamiSempai писал(а):
anber писал(а):Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
У меня тоже.
Что-то altwin, последнее время, сам на себя не похож.
Можно я обоим в одном месте отвечу? :) На самом деле если бы вы не поленись использовать google, предположив, что проблема не во мне, то нашли бы хотя бы этот туториал: http://www.migapro.com/click-events-listview-gridview/ ;) :idea: Там секция Problem -схожа с вашей и решение показанно ... Даже не предположу, почему у вас не сработало, но помнится на stack overflow видел что -то подобное, думаю если поискать -впорос решиться, все таки вы оба уж точно не новички ;)

P.S. но вообще прежде, чем читать раз уж пробуете, то попробуйте так: clickable=false, я же не могу всего помнить :) Суть в том проблемы, что у button есть личный обработчик, который с listView конфликтует, вам нужно просто прибить его.
Изображение

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение KamiSempai » 17 июл 2014, 13:23

altwin писал(а):
KamiSempai писал(а):
anber писал(а):Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
У меня тоже.
Что-то altwin, последнее время, сам на себя не похож.
Можно я обоим в одном месте отвечу? :) На самом деле если бы вы не поленись использовать google, предположив, что проблема не во мне, то нашли бы хотя бы этот туториал: http://www.migapro.com/click-events-listview-gridview/ ;) :idea: Там секция Problem -схожа с вашей и решение показанно ... Даже не предположу, почему у вас не сработало, но помнится на stack overflow видел что -то подобное, думаю если поискать -впорос решиться, все таки вы оба уж точно не новички ;)
Вот как же я не люблю такие недосказанности, когда люди отстаивают свою точку зрения не полностью раскрыв ход своих мыслей. Я не телепат, что бы догадаться о том, что у вас в голове.
Речь шла о OnClickListener и OnItemClickListener но ни как не о ((ListView) parent).performItemClick(v, position, 0);

В конечном счете, получается то же самое, что и у меня. Только в моем случае листнер на кнопку назначается один раз а в том примере это делается при каждом getView.

PS: AdapterContextMenuInfo использую по тому, что при первоначальном создании адаптера мне нужен был именно AdapterContextMenuInfo.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение anber » 17 июл 2014, 13:29

Ок поехали дальше, эта схема проблематична: http://www.migapro.com/click-events-listview-gridview/

вот фрагмент кода:

Код: Выделить всё

            public View getView(final int position, View convertView, final ViewGroup parent) {
                if (convertView == null) {
                    LayoutInflater inflater = LayoutInflater.from(MyActivity.this);
                    convertView = inflater.inflate(R.layout.myitem, parent, false);

                    // place1
                    convertView.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            ((ListView) parent).performItemClick(v, position, 0);
                        }
                    });
                }

                // place2
                convertView.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ((ListView) parent).performItemClick(v, position, 0);
                    }
                });
                
                return convertView;
            }
Конкретно по следующей причине:

1) если мы размести его в place1 то position у элементов будет всегда один, т.е. к примеру у нас на экране влезло 9 элементов, у первого position=0, у последнего position=8, если мы немного прокрутим то следующий элемент будет показывать position=0 вместо position=9.

2) если мы размести его в place2 то список бедут тормозить при прокрутке на слабых девайсах из-за того что постоянно создаются новые объекты типа View.OnClickListener()


UPD. >>>В конечном счете, получается то же самое, что и у меня. Только в моем случае листнер на кнопку назначается один раз а в том примере это делается при каждом getView.
вот это я и имел в виду
Последний раз редактировалось anber 17 июл 2014, 13:30, всего редактировалось 1 раз.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 13:29

KamiSempai писал(а):
altwin писал(а):
KamiSempai писал(а):
anber писал(а):Проверил - при клике на кнопке - ничего не вызывается. Чего ты не договариваешь ;)
У меня тоже.
Что-то altwin, последнее время, сам на себя не похож.
Можно я обоим в одном месте отвечу? :) На самом деле если бы вы не поленись использовать google, предположив, что проблема не во мне, то нашли бы хотя бы этот туториал: http://www.migapro.com/click-events-listview-gridview/ ;) :idea: Там секция Problem -схожа с вашей и решение показанно ... Даже не предположу, почему у вас не сработало, но помнится на stack overflow видел что -то подобное, думаю если поискать -впорос решиться, все таки вы оба уж точно не новички ;)
Вот как же я не люблю такие недосказанности, когда люди отстаивают свою точку зрения не полностью раскрыв ход своих мыслей. Я не телепат, что бы догадаться о том, что у вас в голове.
Речь шла о OnClickListener и OnItemClickListener но ни как не о ((ListView) parent).performItemClick(v, position, 0);

В конечном счете, получается то же самое, что и у меня. Только в моем случае листнер на кнопку назначается один раз а в том примере это делается при каждом getView.

PS: AdapterContextMenuInfo использую по тому, что при первоначальном создании адаптера мне нужен был именно AdapterContextMenuInfo.
ну да виноват, посмотрел на заголовок и думал тема раскрыта :) А как же быть с clickable=false, я честно не совсем понимаю, почему у вас не сработало focusable, но кликабельность то кнопки должна прибиться... этого на самом деле достаточно, чтобы button работала в списке также как и textView.

может эта рекомендация поможет:
android:focusable="false"
android:focusableInTouchMode="false"
doesn't work for ImageButton.

In your layout xml, add this property to root layout

android:descendantFocusability="blocksDescendants"
It works perfectly for a listview that has ImageButton.
хотя да, проблему вашу вижу, но заметьте - это баг... https://code.google.com/p/android/issues/detail?id=3414 собственно решаемый.
Кстати для решения там в issue предлогается похожий код... но всеже в root layout вот эта строчка должна уж точно помочь - android:descendantFocusability="blocksDescendants"
Последний раз редактировалось altwin 17 июл 2014, 13:36, всего редактировалось 1 раз.
Изображение

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение anber » 17 июл 2014, 13:34

Эти рекомендации и подобные никак не помогут в принципе, чтобы в onItemClick() обрабатывать нажатия на кнопки из item.

UPD. Их соль в одном - заглушить клик на кнопке в принципе чтоб его обработчик не вызвался, с этим они справляются отлично, спору нет.
Последний раз редактировалось anber 17 июл 2014, 13:37, всего редактировалось 1 раз.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 54. Кастомизация списка. Создаем свой адаптер

Сообщение altwin » 17 июл 2014, 13:37

anber писал(а):Эти рекомендации и подобные никак не помогут в принципе, чтобы в onItemClick() обрабатывать нажатия на кнопки из item.
Старнно, но ведь всем помогают? http://stackoverflow.com/a/12528960/2611075 Да и как бы я сегодня первый раз так глубоко в research этой проблемы пошел... у меня вообще вопросов не возникало стандартными средствами....
Изображение

Ответить