消息列表的更新下拉条的实现

来源:互联网 发布:淘宝无线优惠券链接 编辑:程序博客网 时间:2024/06/08 14:14

当我们在浏览新闻客户端或社交网站时,通常都会有下拉更新消息,并显示有多少条消息更新,这个功能实际上是在Fragment里面重写setUserVisibleHint方法实现的,setUserVisibleHint这个方法是当前页面可见是的相关操作。当ViewPager中存在三个页面的时候,当默认是第一个页面,并且被打开。那么在我们的后台就会收集到用户打开两个页面的信息,通常是这个可见页面的左右两个页面。

而我们的设计思路就是先加载数据,加载结束后,显示更新条,并在两秒后消失。而这些的实现需要子线程把数据传递给Handler,然后在主线程里面根据消息队列的what属性判断是进行哪步操作,并执行相关的代码即可。

public class ListViewItemFragment extends Fragment {
private ListView listView;
private Context mContext;
private ImageView empty_view;
private TextView notify_view_text;
private RelativeLayout notify_view;
private int num=0;
private static final int SET_DATA=1;
private static final int SET_NOTIFY=2;
private ArrayList<NewsItem> data;
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SET_DATA:
empty_view.setVisibility(View.GONE);
data = new ArrayList<NewsItem>();
NewsData newsData = new NewsData();
newsData.initData(data);
NewsItemAdapter adapter = new NewsItemAdapter(mContext, data);
listView.setAdapter(adapter);
break;
case SET_NOTIFY:
notify_view.setVisibility(View.VISIBLE);
notify_view_text.setVisibility(View.VISIBLE);
notify_view_text.setText("有数据更新");
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
notify_view.setVisibility(View.GONE);
}
},2000);

//notify_view.setVisibility(View.GONE);

break;
default:
break;
}
}
};





@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mContext=activity;
}


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.article_list,null);
listView = (ListView)view.findViewById(R.id.listview);
empty_view=(ImageView)view.findViewById(R.id.empty_view);
notify_view=(RelativeLayout)view.findViewById(R.id.notify_view);
notify_view_text=(TextView)view.findViewById(R.id.notify_view_text);
return view;
}


@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){
new Thread(new Runnable() {
@Override
public void run() {
Message msg=mHandler.obtainMessage(SET_DATA);
mHandler.sendMessage(msg);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
NotifyThread thread=new NotifyThread();
thread.start();
}
}


public class NotifyThread extends Thread{
@Override
public void run() {
num=1;
Message msg=mHandler.obtainMessage(SET_NOTIFY,num);
mHandler.sendMessage(msg);
}


}

0 0