Android中ListView实现刷新时变成不确定进度条

效果图

刷新之前:

刷新时


首先listView中最上面的ItemView的布局文件和其他布局文件是不一样的,里面是线性布局包含了一个ProgressBar和TextView控件,初始设置ProgressBar隐藏,TextView显示。当点击TextView时,ProgressBar显示,TextView隐藏。等刷新好后就会就会重新加载布局文件,又恢复到初始状态了。

刷新布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
   android:background="@drawable/list_background"
    android:orientation="vertical" >
   <!--  小圆形进度条 -->
    <ProgressBar 
        android:id="@+id/content_reload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:attr/progressBarStyleSmall"
        android:gravity="center_horizontal"
        android:visibility="gone"
        />
    <TextView 
        android:id="@+id/textView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="更多" 
  		android:textColor="@color/black" 
  		android:background="@drawable/list_item_bg"
  		android:textSize="20dip" 
  		android:textStyle="bold"
        />
</LinearLayout>

在listView的自定义适配器中的getView方法如下:

@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			
			 if( position == 0)   // 第一个item为刷新
			 {
					View refView = LayoutInflater.from(context).inflate(R.layout.list_moreitems, null);
					TextView tvRefresh = (TextView) refView.findViewById(R.id.textView);
					tvRefresh.setText("刷新");
					
					return refView;
			 }
			else if( position == this.getCount()-1)  // 最后一个为"更多"
			{
					View moreView = LayoutInflater.from(context).inflate(R.layout.list_moreitems, null);
					TextView tvMore = (TextView) moreView.findViewById(R.id.textView);
					tvMore.setText("更多");
					return moreView;
			}
			 View itemView = null;
			 if( convertView != null && convertView.findViewById(R.id.ivItemPortrait) != null)
			{
				 // 取原来的
				 itemView = convertView;				 
			}else
			{
				// 新建
			 	itemView = LayoutInflater.from(context).inflate(R.layout.itemview, null);
			}
			 
			 // 给控件赋值
				ViewHolder holder = new ViewHolder();
				holder.tvItemContent = (TextView) itemView.findViewById(R.id.tvItemContent);
				holder.tvItemName = (TextView) itemView.findViewById(R.id.tvItemName);
				holder.tvItemDate = (TextView) itemView.findViewById(R.id.ivItemDate);
				holder.ivItemPic = (ImageView) itemView.findViewById(R.id.ivItemPortrait);
				
				Status st = listStatus.get(position-1);
				holder.tvItemContent.setText(st.getText());
				holder.tvItemName.setText(st.getUser().getName());
				Date time = st.getCreatedAt();
				String date = new SimpleDateFormat("HH:mm:ss").format(time);
				holder.tvItemDate.setText(date);
				// 得到用户头像
				User user = st.getUser();
				Drawable picture = MainService.allPic.get(user.getId());
				if( picture != null ){
					holder.ivItemPic.setImageDrawable(picture);
				}
				return itemView;
		}


为listView注册点击事件的处理方法如下

allStatus.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View view, int arg2,long id) {	
				
				if( id == 0) // 刷新
				{
					TextView textView = (TextView) view.findViewById(R.id.textView); // 获得布局文件中的textView
				  textView.setVisibility(View.GONE);					//隐藏
		ProgressBar content_reload =(ProgressBar) view.findViewById(R.id.content_reload); // 获得布局文件中的progressBar
				  content_reload.setVisibility(View.VISIBLE);			// 显示
					init();
				}else if( id == -1) // 更多
				{
					TextView textView = (TextView) view.findViewById(R.id.textView);
				   textView.setVisibility(View.GONE);
				   ProgressBar content_reload =(ProgressBar) view.findViewById(R.id.content_reload);
				   content_reload.setVisibility(View.VISIBLE);
					nowpage++;
					HashMap<String, Integer> params = new HashMap<String, Integer>();
					params.put("page", Integer.valueOf(nowpage));
					params.put("pagesize",  Integer.valueOf(pagesize) );
					Task task = new Task(Task.TASK_GET_USER_HOMETIMEINLINE_MORE, params);
					MainService.newTask(task);

					Log.i("more", "page:"+nowpage+"  pagesize:"+pagesize);
				}
			}
		});



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值