`
stephen830
  • 浏览: 3010186 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ListView中有控件隐藏或显示造成的显示错误问题

 
阅读更多

 

ListView中有控件隐藏或显示造成的显示错误问题

 

直接上代码

@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		/**
		 * 进行ListView 的优化
		 */
		if (convertView == null) {
			convertView = (ViewGroup) LayoutInflater.from(context).inflate(
					R.layout.abc_fragment_nearby_listview, parent, false);
			holder = new ViewHolder();
			holder.iv_type=(ImageView) convertView.findViewById(R.id.abc_fragment_nearby__listview__iv_type);
			holder.iv_faceimg=(ImageView) convertView.findViewById(R.id.abc_fragment_nearby__listview__iv_faceimg);
			holder.tv_name=(TextView) convertView.findViewById(R.id.abc_fragment_nearby_listview__tv_name);
			holder.iv_player_team_faceimg= (ImageView) convertView.findViewById(R.id.abc_fragment_nearby__listview__iv_player_team_faceimg);
			holder.tv_player_team_name= (TextView) convertView.findViewById(R.id.abc_fragment_nearby__listview__iv_player_team_name);
			convertView.setTag(holder);
			Log.d("TagListView", "新创建ViewHolder");
		} else {
			holder = (ViewHolder)convertView.getTag();
			Log.d("TagListView", "缓存中获取ViewHolder");
		}
		
		//restore view state
		holder.tv_player_team_name.setVisibility(View.VISIBLE);
		holder.iv_player_team_faceimg.setVisibility(View.VISIBLE);

		//get data
		final BeanNearby bean = datas.get(position);
		
		//数据类型
		int type=bean.getType();
		ImageView iv_type= holder.iv_type;
		int[] types = new int[]{R.drawable.abc_fragment_nearby__listview__iv_type0,R.drawable.abc_fragment_nearby__listview__iv_type1,R.drawable.abc_fragment_nearby__listview__iv_type2};
		iv_type.setImageResource(types[type]);
		
		//设置图片
		String faceimg = bean.getFaceimg();
		ImageView iv_faceimg= holder.iv_faceimg;
		logi("faceimg="+faceimg);
		
		//显示图片
		new DownAndShowImageTask(faceimg,iv_faceimg).execute();
		
		//设置名称
		String name = bean.getName();
		TextView tv_name = holder.tv_name;
		tv_name.setText(name);
		
		//如果是球员
		ImageView iv_player_team_faceimg = holder.iv_player_team_faceimg;
		TextView tv_player_team_name =holder.tv_player_team_name;
		String playerTeamName = bean.getPlayerTeamName();
		String playerTeamFaceimg = bean.getPlayerTeamFaceimg();
		if(type==BeanNearby.TYPE_PERSON){
			if(playerTeamName==null){
				playerTeamName="";
			}
			tv_player_team_name.setText(playerTeamName);
			
			if(playerTeamFaceimg!=null&&playerTeamFaceimg.length()>0){
				new DownAndShowImageTask(playerTeamFaceimg,iv_player_team_faceimg).execute();
			}else{
				iv_player_team_faceimg.setVisibility(View.INVISIBLE);
			}
		}else{
			tv_player_team_name.setVisibility(View.GONE);
			iv_player_team_faceimg.setVisibility(View.GONE);
		}

		return convertView;
	}

 

 其中的

//restore view state
holder.tv_player_team_name.setVisibility(View.VISIBLE);
holder.iv_player_team_faceimg.setVisibility(View.VISIBLE);

 这段代码必须要有,对布局进行还原。这是因为在下面的代码中会对控件进行隐藏(View.INVISIBLE)或彻底不显示(View.GONE)。

如果不加这段代码,这个ListView上下滚动时候你会发现数据会发生混乱和错误。

 

分享到:
评论

相关推荐

    c#中可编辑listview控件

    在C#编程环境中,ListView控件是Windows Forms和WPF应用程序中常见的组件,通常用于显示数据集合,如表格或图标视图。然而,标准的ListView控件并不支持直接编辑其项或子项(即单元格)的内容。为了解决这个问题,...

    VB为Listview控件添加自定义可编辑列功能

    在VB(Visual Basic)编程中,Listview控件是一个常用且功能强大的组件,它允许开发者以列表、小图标、大图标或详细信息视图显示数据。然而,Listview控件默认情况下并不支持列的直接编辑。为了实现这个功能,我们...

    android listview带有editText

    对于这些问题,可以通过设置ListView的`transcriptMode`属性、监听软键盘的显示隐藏、或者使用诸如`android:descendantFocusability`这样的XML属性来调整ListView的行为。 至于提到的"后2个包没用",可能是指在解决...

    C# winform ListView 中实现可编辑文本或双击出现下拉列表框

    在C# WinForm开发中,ListView控件是一个常用的组件,用于显示列表数据。然而,标准的ListView控件并不直接支持用户编辑其中的文本项或在双击时弹出下拉列表框。为了实现这样的功能,我们需要对ListView进行自定义...

    VC++ 重写ListView控件(可以直接使用)

    在VC++编程环境中,ListView控件是Windows应用程序中常用的一种组件,用于显示一系列项,每项可以包含多个列,常用于文件管理器、任务管理器等应用中。本项目提供了对ListView控件的重写,增加了更多的功能和自定义...

    解决ListView嵌套CheckBox滑动时选中状态错乱

    在Android开发中,ListView是常用的数据展示控件,它可以有效地展示大量数据并实现滚动效果。然而,当ListView内部嵌套CheckBox等可交互组件时,常常会遇到一些问题,特别是滑动过程中选中状态错乱的现象。这个问题...

    vb ListView 可编辑

    在VB(Visual Basic)编程环境中,ListView控件是一种常用的数据展示工具,它可以显示多项数据,并且具有多种视图模式,如图标、列表、详细信息等。在“vb ListView 可编辑”的主题下,我们将深入探讨如何使ListView...

    android里多个listview的删除

    4. **隐藏控件**:在`getView()`中,可能还需要根据某些条件隐藏或显示item内的控件。这可以通过设置View的可见性来实现,例如`view.setVisibility(View.GONE)`或`view.setVisibility(View.VISIBLE)`。 5. **多...

    listview分页加载(底部loading)

    在IT行业中,ListView是Android开发中常用的一种控件,它用于显示大量的列表数据。"ListView分页加载"是一种常见的优化策略,特别是在处理大数据集时,能够显著提高用户体验和应用性能。这种技术通常被称为无限滚动...

    Android下拉刷新控件(ListView好ScrollView版).zip

    在Android应用开发中,下拉刷新控件是一个非常常见的功能,尤其在列表视图(ListView)和滚动视图(ScrollView)中,它允许用户通过下拉手势更新数据,带来更流畅的用户体验。本资料包“Android下拉刷新控件(ListView好...

    ListView异步加载图片进度条

    本文将深入探讨如何实现ListView中图片的异步加载,并结合进度条显示加载状态,使代码更加规范。 一、异步加载图片的重要性 在Android中,如果直接在主线程中加载大图或数量众多的图片,会导致UI阻塞,用户体验...

    android中listview的上拉加载更多

    根据加载状态,隐藏或显示这个视图。 5. **分页加载**:在实际应用中,数据通常不是一次性全部加载,而是分页加载。因此,你需要维护一个页码变量,并在加载更多时递增页码,作为请求新数据的参数。 6. **处理空...

    Listview中使用线程实现无限加载更多项目的功能

    在Android开发中,ListView是一种常见的控件,用于展示大量数据列表。当用户滚动到底部时,我们常常希望实现“无限加载”或者称为“下拉刷新”、“上拉加载更多”的功能,以动态加载新的数据。这个功能使得用户无需...

    listview分页 -- 底部加载更多

    ListView是Android平台上常见的一种列表控件,用于展示大量数据,特别是在数据量大到无法一次性全部加载到内存中的情况下,分页加载技术显得尤为重要。"listview分页 -- 底部加载更多"是一个常见的用户交互模式,它...

    Android ListView 实现上拉加载的示例代码

    当加载数据过程中出现异常,如网络错误或数据解析错误,FooterView应显示错误提示,并提供重试选项。 通过以上步骤,我们就能够实现一个完整的ListView上拉加载功能。这个功能不仅可以提高用户交互性,还能帮助...

Global site tag (gtag.js) - Google Analytics