侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

ListView 使用问题

2024-05-15 星期三 / 0 评论 / 0 点赞 / 97 阅读 / 3652 字

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

问题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);  }

广告 广告

评论区