我有一个ListView。在XML中它看起来像这样:
相对布局高度= 250
和
相对布局高度= 120
现在,默认情况下,高度为120.我右上角的可展开图标有一个OnClickListener
。这是代码:
expand.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
expanded = true;
}
});
和
if(expanded){
rcell.getLayoutParams().height = 250;
}else{
rcell.getLayoutParams().height = 120;
不幸的是,布尔值expanded
似乎在所有对象中保持不变。
因此,当我单击expand
按钮时,向下滚动后,所有单元格都会展开。
如何正确处理?
答案 0 :(得分:0)
我只是假设你的代码在适配器的getView函数中。
如果是这种情况,看起来你的布尔“扩展”是该适配器的私有成员。这意味着单击展开的按钮会将其设置为true,当列表视图重绘时,它将适用于所有行。
在我看来,您的解决方案要么看看ExpandableListView,要么更改代码以跟踪列表视图中哪些行应该展开,如下所示。
// List that keep track of expanded states for each row.
private ArrayList<boolean> rowExpandedStates = new ArrayList<>();
public MyAdapterConstructor()
{
// Default false state for all rows.
// Insert false on as many rows that this list should have
for (int i = 0; i < totalRows; i++)
rowExpandedStates.add(false);
}
// And the following code below in your getView function of the adapter.
expand.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
// Should this row be expanded or not?
// The getView function has a parameter which gives you the current row
rowExpandedStates.set(rowIndex, !rowExpandedStates.get(rowIndex));
}
});
// Check if the current row should be expanded when the row is drawn
if(rowExpandedStates.get(rowIndex)){
rcell.getLayoutParams().height = 250;
}else{
rcell.getLayoutParams().height = 120;