社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
我相信有许多还在用XListView,我感觉很老了,Android最新集成了一个官方下拉刷新组件,使用之后,感觉给人眼前一亮,非常好看,
我本人也很喜欢,那么Android官方集成的一个组件叫什么?相信大家都应该知道了,那就是SwipeRefreshLayout ,好了,不多说了,
下面我们就先来看看官方API:
这里方法很多,我们就先调几个常用的说说:
1、isRefreshing() 这个方法不多说了,大家看方法名字就能知道他是来干什么的,而且还是个boolean,自然就不用多说了。
2、setColorScheme():
这个方法要说一下,这个是用来设置下拉刷行圆圈旋转的颜色的,不过这个方法已经过时,被setColorSchemeResuorces替代了。
3、setOnRefreshListener():
这个方法看方法名字也能一眼就能看出来,他是用来设置刷新监听的,没错,就是的
4、setRefreshing()方法:
这个方法是用来设置加载动画是否可见,也可以说是控制加载动画的显示。
好了,上面基本常用的API就是这些了,不过很遗憾,这个控件并没有实现上拉刷新,不过你可以通过监听ListView的滚动,来显示Loading动画,你说对吧,不过,我发现Google太不应该了,做事只做一半,也不知道为什么?我也无力吐槽了。
当然Google官方也提供了V4兼容低版本的包,来保证低版本也可以使用,这个真心很棒,必须要给个赞,你们说对不对?下面我会给出这个控件的介绍图:
上面介绍完了控件的介绍以及API的介绍,下面我们就开始来看看如何实现了:
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.qhb.refreshdemo.MainActivity">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/srlView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
ListView中item代码:
<?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">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:padding="15dp"
android:text="哈哈"/>
</LinearLayout>
实现代码:
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
private static final int REFRESH_COMPLETE = 2015;
private SwipeRefreshLayout srlView;
private ListView myListView;
private MyAdapter myAdapter;
private List<String> item = new ArrayList<String>(Arrays.asList("Java", "Javascript", "C++", "Ruby", "Json",
"HTML"));
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case REFRESH_COMPLETE:{
item.addAll(Arrays.asList("Android","iOS","乔布斯","Objective-C"));
myAdapter.notifyDataSetChanged();
srlView.setRefreshing(false);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
srlView = (SwipeRefreshLayout) findViewById(R.id.srlView);
myListView = (ListView) findViewById(R.id.myListView);
myAdapter = new MyAdapter(item);
myListView.setAdapter(myAdapter);
srlView.setOnRefreshListener(this);//设置下拉刷新监听,很遗憾,这个并没有为你实现上拉刷新
srlView.setColorSchemeResources(R.color.colorPrimary,R.color.colorAccent,R.color.colorPrimaryDark,R.color.colorRed,R.color.colorGreen);
//srlView.setColorScheme();已过时,被上面setColorSchemeResources替代
}
@Override
public void onRefresh() {
handler.sendEmptyMessageDelayed(REFRESH_COMPLETE,3000);
}
class MyAdapter extends BaseAdapter{
private List<String> list;
public MyAdapter(List<String> list){
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHoler viewHoler;
if(convertView == null){
convertView = View.inflate(MainActivity.this,R.layout.item_layout,null);
viewHoler = new ViewHoler();
viewHoler.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
convertView.setTag(viewHoler);
}else{
viewHoler = (ViewHoler) convertView.getTag();
}
viewHoler.tvTitle.setText(list.get(position));
return convertView;
}
class ViewHoler{
TextView tvTitle;
}
}
}
好了,很晚了,今天就到这里,每天都很累,如有不好的地方还望各位多多包含,多多指证,欢迎拍砖、吐槽!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!