Создайте список контактов программно

#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 класс и добавить необходимые средства получения и настройки.