根据内容大小动态增加Android列表视图中单元格的大小?

时间:2012-08-27 11:50:04

标签: android listview

我正在做一个项目,我使用自定义列表视图,其中包含textview。数据来自服务器。我想根据数据大小更改单元格的高度。如果内容超过两行,我必须将其修剪为两行并显示查看更多按钮。单击查看更多按钮展开单元格以显示完整的详细信息。我用Google搜索了它。但我找不到任何有用的资源。任何人都可以帮我解决这个问题,任何有用的链接或建议吗?`

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是首先使listView无效,强制它重绘可见元素,然后在适配器的getView方法中处理布局更改。
试试这个:
将showTrimmed(int position,boolean value)方法添加到适配器。这将更新适配器内的结构,以跟踪要修剪或不修剪的列表项。然后在getView方法中,在创建项目视图时,测试是否应该修剪当前元素,并根据结果创建正确的视图。 我做了类似的事情来实现不同但相似的结果并且它有效。 请记住在调用showTrimmed之后调用invalidate以强制listView重绘显示的项目。

编辑:我发布的代码与您想要的代码不同,但它的想法非常相似:

public class HeroListViewAdapter extends ArrayAdapter<Hero> {

public static int NO_POS = -1;

private List<Hero> heroes;
private int selected_pos = NO_POS;

public HeroListViewAdapter(Context context, List<Hero> heroes){
    super(context, R.layout.hero_list_item_view, heroes);
    this.heroes = heroes;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = GuiBuilder.createHeroListItemView(heroes.get(position),getContext(),parent,false);
    if(position == selected_pos){
        rowView.setBackgroundColor((rowView.getResources().getColor(R.color.list_item_selected_color)));
    }
    return rowView;
}

public void setSelectedPosition(int selected_pos){
    this.selected_pos = selected_pos;
}

public int getSelectedPosition(){
    return selected_pos;
}

public Hero getSelectedHero(){
    if(selected_pos>=0 && selected_pos<heroes.size())
        return this.getItem(selected_pos);
    else
        return null;
}

} 

而不是setSelectedPosition你应该使用showTrimmed方法来更新内部成员,如setSelectedPos那样,以便跟踪每个列表项的修剪状态。然后在getView方法中进行测试(就像我在if(position == selected_pos)中那样),然后根据测试结果构建自定义修剪或未修剪的列表项。我使用这些函数的监听器是:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
   public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        list_adapter.setSelectedPosition(position);
        listView.invalidate();
        }
    }
);

您可以尝试根据自己的需要更新此提示。特别是在我的情况下,我通过以编程方式更改其背景来突出显示单击的列表视图项。