Так что я заинтересован в создании настраиваемого контекстного меню для каждого из моих элементов списка, когда на них долго нажимают. Я видел, как это реализовано в приложении Baconreader, и думал, что это будет так просто:
- Создание одного LinearLayout (или чего бы то ни было) при заполнении списка
- При длительном нажатии на элемент скрыть его (View.GONE) и добавить LinearLayout к родительскому элементу списка.
- При необходимости покажите элемент списка и удалите LinearLayout из его родителя.
Мне удалось скрыть элементы списка наItemLongClick, но оказалось, что вы не можете добавить Views в ListView (не так). Но это должно быть способ, которым Baconreader делает это. Я не могу понять это. Вот некоторый код, который я пробовал:
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1, int arg2, long arg3) {
arg1.setVisibility(View.GONE); // hide the list item, works
// trying to add a TextView after a list
// item's position, doesn't work.
listView.addView(textView, arg2);
return true;
}
});
Вот пример того, как это должно выглядеть:
Таким образом, элемент списка скрыт и пользовательское контекстное меню (похоже на ViewGroup) размещается непосредственно над позицией элемента списка. Но как?
Редактировать: Решено. Обновленный код:
list_item.xml
<TextView
android:id="@+id/list_item_title"
.....
/>
</FrameLayout>
Java-код
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1, int arg2, long arg3) {
((FrameLayout)arg1).addView(w);
return true;
}
});
И, конечно, вы должны использовать SimpleAdapter вместо ArrayAdapter.