如果您有一个简单的布局,那么您可以用LinearLayout 替换您的ListView 组件,并手动将您需要添加/删除并单击其中的项目的功能一起编程。
这是我自己的一个简单示例。 refreshStudentList() 取代了在适配器上调用的 notifyDataSetChanged(),recentConnections 是 LinearLayout 和 adapter 是 Adapter 的一个实例(您可以使用您用于 @987654329 的适配器@):
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));
}
如您所见,我为每个列表项设置了 onClick 侦听器,而不是 onItemClickListener。如果您想实现单击列表项的外观和感觉(通过更改 MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_UP 上的视图背景),可以轻松地将其更改为 onTouch 侦听器。
您需要注意的另一件事是我为每个值的高度硬编码了一个 dp 值(在这种情况下为50dp)。当您以编程方式创建和膨胀视图时,它们没有“高度”值,因此“wrap_content”变为 0。
另外,适配器上的notifyDataSetChanged() 不会做任何事情。
正如我所说,这是一个简单的解决方案,但如果这是您最终的目标,那么它就是构建您自己的 ExtendingListView 自定义组件的开始。