ListView 使用问题
ListView 使用问题
CrazyManDF 发表于2年前
ListView 使用问题
  • 发表于 2年前
  • 阅读 98
  • 收藏 4
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: ListView 使用问题

问题1:不能动态获取ViewHolder的TextView控件的getlinecount(),只能返回0?

if(convertView == null){
	convertView = lInflater.inflate(R.layout.listview, null);
	holder = new ViewHolder();
	holder.text2 = (TextView)convertView.findViewById(R.id.TextView02);
	convertView.setTag(holder);
}else{
	holder = (ViewHolder)convertView.getTag();
}

holder.text2.setText(arr2[position]);
int lineCnt = holder.text2.getLineCount();

static class ViewHolder{
    TextView text2;
} 

解决方法:

holder.text2.setText(arr2[position]);
holder.text2.post(new Runnable() {
	@Override
	public void run() {
		int lineCnt = holder.text2.getLineCount();
		// Perform any actions you want based on the line count here.
	}
});

问题2:ListView 的Item布局文件中,有TextView控件,TextView控件的内容行数会变化,所有不能确定大小,导致android:layout_weight="1"或height为match_parent的控件不能显示

解决方法: public View getView(int position, View convertView, ViewGroup parent) 中需要计算根布局控件的高度 // 计算ListView 的Item的高度(系统不能自动确定) adjustMemoHeight(viewHolder);

/**
 * 调整ListView Item 的高度
 *
 * @param viewHolder
 */

private static void adjustMemoHeight(ViewHolder viewHolder) {

	int totalHeight = 0; //统计高度
	// 测量所有包含控件的高度
	viewHolder.tv_time.measure(0,0);
	viewHolder.tv_action.measure(0,0);
	viewHolder.tv_memo.measure(0,0);
	viewHolder.tv_voice.measure(0,0);

	//int memoHeight = viewHolder.tv_memo.getLineHeight() * viewHolder.tv_memo.getLineCount();
	//int padding =viewHolder.tv_memo.getCompoundPaddingTop() + viewHolder.tv_memo.getPaddingBottom();

	totalHeight = viewHolder.tv_time.getMeasuredHeight()
			+ viewHolder.tv_action.getMeasuredHeight()
			+ viewHolder.tv_memo.getMeasuredHeight()
			+ viewHolder.tv_memo.getLineHeight()  // 加一行文本高度,系统测定有些会少算一行(但最后一行只有2,3个字时)
	;
	if(viewHolder.tv_voice.getVisibility() == View.VISIBLE){
		totalHeight += viewHolder.tv_voice.getMeasuredHeight() ;
	}

	//Log.d(TAG, "totalHeight====" + totalHeight
	//		+ ",1="+ viewHolder.tv_time.getMeasuredHeight()
	//		+ ",2="+ viewHolder.tv_action.getMeasuredHeight()
	//		+ ",3="+ viewHolder.tv_memo.getMeasuredHeight()
	//		+"=高度="+memoHeight +"=padding高度="+padding
	//		+ ",4="+ viewHolder.tv_voice.getMeasuredHeight()
	//);

	//viewHolder.rl_item为根布局控件
	ViewGroup.LayoutParams params = viewHolder.rl_item.getLayoutParams();
	params.height = totalHeight;
}

问题3:ListView中嵌套ListView的高度问题

解决方法:计算ListView的子控件高度总和,重新设置ListView 的高度

/** 
 * 设置Listview的高度 
 */  

public void setListViewHeight(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);  
}
标签: ListView Android
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 3
博文 73
码字总数 25546
×
CrazyManDF
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: