动态调整单元格高度Android

时间:2015-09-01 13:53:27

标签: android listview dynamic cell

我有一个ListView。在XML中它看起来像这样:

相对布局高度= 250

Relative Layout height = 250

相对布局高度= 120

enter image description here

现在,默认情况下,高度为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按钮时,向下滚动后,所有单元格都会展开。

如何正确处理?

1 个答案:

答案 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;