您的位置:首页 > 移动开发 > Android开发

Android ListView嵌套

2015-06-01 19:45 423 查看
 技术初段,还请各位多多赐教,不吝感谢。

 最近做到朋友圈以及相关评论的功能,朋友圈每个item下需要实现评论列表。(做的比较简陋)

 实现方案是在ListView的item下嵌套一个子ListView实现评论列表。另外一说,评论框我用的是PopupWindow做的,而不是在item下隐藏布局,不知道其他软件是如何实现的。

 用到子ListView时就遇到问题了,子ListView高度的问题。可以根据子item来重新计算高度,在setAdapter方法后调用设置高度的方法setListViewHeightBasedOnChildren(mListView).

    /**

     * 重新计算子listview高度适配

     * @param listView

     */

    public static void setListViewHeightBasedOnChildren(ListView listView) {    

        ListAdapter listAdapter = listView.getAdapter();     

        if (listAdapter == null) {   

            return;    

        }    

    

        int totalHeight = 0;    

        for (int i = 0; i < listAdapter.getCount(); i++) {    

            View listItem = listAdapter.getView(i, null, listView);    

            listItem.measure(0, 0);    

            totalHeight += listItem.getMeasuredHeight();    

        }    

    

        ViewGroup.LayoutParams params = listView.getLayoutParams();    

        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));    

        listView.setLayoutParams(params);    

    }  

 调用了这个方法之后,发现还有一个问题,子item评论不是一行的话,高度计算就会出错,只能计算Textview一行的高度。所以还需要重写子listview,在
onMeasure
()方法中  将其高度设置为尽可能显示全部内容高度--
MeasureSpec.AT_MOST
。代码如下:

public
 
class
 
MyListView 
extends
 
ListView {

 
    
public
 
MyListView(android.content.Context context, android.util.AttributeSet attrs) {  

        
super
(context, attrs);  

    

    
 
    
@Override

    
public
 
boolean
 
dispatchTouchEvent(MotionEvent ev) {

        
return
 
super
.dispatchTouchEvent(ev);

    
}

    
 
    
 
    
@Override

    
protected
 
void
 
onMeasure(
int
 
widthMeasureSpec, 
int
 
heightMeasureSpec) {

        
int
 
expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 
2
,  

                
MeasureSpec.AT_MOST); 

        
super
.onMeasure(widthMeasureSpec, expandSpec);

    
}

    
 
}


不过貌似,直接使用自定义的ListView不用调用上述的设置高度的方法也能成功显示评论。

这样可以基本的完成评论列表功能。如图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息