#android #layout #widget #commonsware-cwac
#Android #планировка #виджет #commonsware-cwac
Вопрос:
Я пытаюсь использовать TouchListView, доступный здесь:https://github.com/commonsguy/cwac-touchlist. Это библиотека Android для создания переупорядочиваемых списков.
Я могу запустить демо-версию нормально, но я не могу найти способ создать список контактов на Java, т. Е. Без определения его в макете XLM.
Вот код из демо-версии:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
TouchListView tlv=(TouchListView)getListView();
adapter=new IconicAdapter();
setListAdapter(adapter);
tlv.setDropListener(onDrop);
tlv.setRemoveListener(onRemove);
}
Это внутри ListActivity. Это прекрасно работает. Теперь вот чего я пытался избежать использования ListActivity:
...
TouchListView tlv = new TouchListView(this, null);
adapter=new IconicAdapter();
setListAdapter(adapter);
...
Не повезло.
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
TouchListView tlv = (TouchListView) (inflater.inflate(R.layout.touchlistview, null));
Тоже не работает.
В обоих случаях список отображается правильно, но я не могу перемещать элементы.
Есть какие-нибудь идеи?
Комментарии:
1. Ну, в первом случае это не сработает, поскольку необходимы различные атрибуты (см.
tlv
Те, что вdemo/
). Второй может сработать, в зависимости от содержимогоR.layout.touchlistview
, если вы в конечном итоге добавитеTouchListView
в родительский контейнер где-нибудь по ходу строки.2. Спасибо. Проблема заключалась в том, что мой идентификатор граббера был неправильным:/ Кстати, есть ли способ иметь элементы разных размеров в списке? У меня есть несколько многострочных записей, и они изменяются до одной строки, как только я что-то перемещаю.
3. На самом деле это не так. Этот код просто адаптирован из некоторых материалов из музыкального приложения AOSP, в котором не было строк разного размера. Существует понятие расширения строки при перетаскивании по ней — Я только что обновил образец, чтобы лучше продемонстрировать это. Однако я думаю, что код предполагает, что в остальном строки имеют одинаковый размер.
Ответ №1:
Проблема, вероятно, в том, что вы не устанавливаете ни один из атрибутов при передаче null
.
По умолчанию для переменной, управляющей режимом удаления, установлено значение -1
, которое равно none
в соответствии с XML-файлом, объявляющим атрибуты.
private int mRemoveMode = -1;
и
<attr name="remove_mode">
<enum name="none" value="-1" />
...
</attr>
В документации указано, что remove_mode=none
означает, что пользователь не может удалить какие-либо записи списка.
Теперь, насколько я знаю, вы не можете создать AttributeSet
без использования xml. Если вы действительно не хотите использовать какие-либо XML-файлы, то вам, вероятно, следует адаптировать TouchListView
класс и добавить необходимые средства получения и настройки.