Intereting Posts
Нет ответа от удаленного клиента: ошибка при передаче файла с использованием asmack Пользовательский просмотр Расширение относительной компоновки Кордова – отказывается выполнять обработчик события inline, поскольку он нарушает следующий контент. Политика безопасности Ошибка манифеста слияния с несколькими ошибками в Android Studio Android: Что такое R? Почему это так Cryptic? Android DataBinding, где можно получить контекст? Xamarin Android – отключить моно журналы Поддерживаемые значения @SuppressWarnings в Android Studio Когда запускается SQLiteOpenHelper onCreate () / onUpgrade ()? Не удалось загрузить карту. Ошибка при обращении к серверам Google с помощью android google maps api v2 Узнать, прослушивает ли дочерний прослушиватель событий на Firebase все данные Android Compass, который может компенсировать отклонение и шаг Как включить отладку SSL на платформе Android? Android Просмотреть разницу performClick () и callOnClick () Android: установка сетки динамических и настраиваемых объектов внутри другой сетки динамических и пользовательских объектов

Фокусируемое EditText в ListView и onItemClick

В каждом элементе ListView есть EditText .

Когда я устанавливаю android:focusable="false" для EditText то onItemClick в элементе ListView работает, но EditText не получает курсор, когда я click внутри.

Если я установлю android:focusable="true" для EditText , тогда EditText будет настраиваться, но onItemClick для ListView не работает, когда я нажимаю на него.

Как отделить onItemClick и настраиваемый EditText в этом элементе?

Solutions Collecting From Web of "Фокусируемое EditText в ListView и onItemClick"

Спасибо @ user370305 за идею с OnTouchListener. Теперь он работает для меня, используя setOnTouchListener() :

 public class AdapterListCards extends CursorAdapter implements View.OnTouchListener { public AdapterListCards(Context context) { super(context, null, true); } @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (view instanceof EditText) { EditText editText = (EditText) view; editText.setFocusable(true); editText.setFocusableInTouchMode(true); } else { ViewHolder holder = (ViewHolder) view.getTag(); holder.edtCode.setFocusable(false); holder.edtCode.setFocusableInTouchMode(false); } return false; } private class ViewHolder { TextView txtName; EditText edtCode; } @Override public View newView(final Context context, Cursor cursor, ViewGroup parent) { View convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false); final ViewHolder holder = new ViewHolder(); holder.txtName = (TextView) convertView.findViewById(R.id.txt_name); holder.edtCode = (EditText) convertView.findViewById(R.id.pass); holder.edtCode.setOnTouchListener(this); convertView.setOnTouchListener(this); convertView.setTag(holder); return convertView; } @Override public void bindView(View view, Context context, Cursor cur) { ViewHolder holder = (ViewHolder) view.getTag(); if (cur!=null) holder.txtName.setText(cur.getString(cur.getColumnIndex("name"))); } } 

И, конечно же: android:windowSoftInputMode="adjustPan" для активности в манифесте.

Мое решение:

 @Override public boolean onTouch(View view, MotionEvent motionEvent) { ViewHolder vh = (ViewHolder) view.getTag(); //vh.row is the convertView in getView or you may call it the row item itself ((ViewGroup)vh.row).setDescendantFocusability(view instanceof EditText?ViewGroup.FOCUS_AFTER_DESCENDANTS:ViewGroup.FOCUS_BLOCK_DESCENDANTS); return false; } 

И добавить

 android:descendantFocusability="blocksDescendants" 

В группу представлений в XML-файле макета для элемента строки списка.

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

Я добавил TextView и EditText в ту же позицию в относительном макете, что означает, что они будут перекрывать друг друга. EditText будет скрыт по умолчанию, и TextView будет отображаться. В этом случае щелчок списка listview работает безупречно.

Затем я назначил сенсорный прослушиватель для TextView и onTouch. Я скрываю текстовое представление и отображаю EditText и requestfocus, позволяющие вводить данные. Даже весь клик по клику запросит фокус для EditText. Поэтому ни один элемент не будет включен.

У меня есть кнопка в панели действий «Готово». Как только я нажму, я обновляю свой флаг в адаптере, говорящий «modeEdit = false» и вызываю notifydatasetchanges.

В GetView мы проверяем флаг, и если modeEdit = false, тогда отобразите TextView.

Это было лучшее решение, которое я должен был работать !!!

Надеюсь это поможет. Дайте мне знать, если кто-то заинтересован в рабочей копии исходного кода.