效果图
刷新之前:
刷新时
首先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);
}
}
});