Если у вас простая компоновка, вы можете заменить компонент ListView
на LinearLayout
и вручную запрограммировать все функции, необходимые для добавления / удаления, и щелкнуть элементы внутри него.
Вот мой простой пример. refreshStudentList()
занял место notifyDataSetChanged()
, вызываемого на адаптере, recentConnections
- это LinearLayout
, а adapter
- это экземпляр Adapter
(Вы можете использовать адаптер, который вы использовали для своего ListView
):
private void refreshStudentList() {
recentConnections.removeAllViews();
for(int i=0; i < adapter.getCount(); i++) {
View toAdd = adapter.getView(i, null, recentConnections);
final int position = i;
toAdd.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// onItemClick functionality here
}
});
recentConnections.addView(toAdd, new LayoutParams(LayoutParams.MATCH_PARENT,
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics())));
}
recentConnections.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}
Как видите, вместо onItemClickListener
я установил onClick
слушатель для каждого элемента списка. Это можно легко изменить, чтобы он был onTouch
слушателем, если вы хотите реализовать внешний вид нажатия на элемент списка (путем изменения фона представления на MotionEvent.ACTION_DOWN
и MotionEvent.ACTION_UP
).
Еще одна вещь, которую вам нужно отметить, это то, что я жестко закодировал значение dp для высоты каждого значения (50dp
в данном случае). Когда вы создаете и раздувает представления программно, у них нет значения «height», поэтому «wrap_content» становится равным 0.
также, notifyDataSetChanged()
на вашем адаптере ничего не сделает.
Как я уже сказал, это простое решение, но это начало создания собственного пользовательского компонента ExtendingListView, если это то, к чему вы в конечном итоге стремитесь.