Android (项目一)xListView 的使用及ProgressBar样式修改
2015-10-21 10:05
585 查看
前几天做项目有个下拉刷新,效果是上面图片展示的,一开始感觉应该挺难做的因为下拉刷新的时候有个图片会进行180度旋转,而且松手后是一个ProgressBar,感觉很纠结,是要自己写吗?自己写出也太麻烦了。后来才发现原来这个下拉刷新是有开源项目可以利用的,那就是xListView。所有的新东西都是一样的,由于我们对它的不熟悉会感觉使用起来特别的困难,而xListView的使用上,在GitHub上面介绍的也不很详细,这样就需要去仔细研究它给出的Demo。
了解它的第一步就是去官网下载Demo。
可以看到xListView现在已经停止维护了,但是停止维护并不代表我们不能再继续使用了。
点击xListView下载连接
xListViewDemo分析
1、使用步骤先去官网下载Demo
2、将在Android Studio你的工程下面新建一个package,package下面放置Demo中的三个java文件,并将相应的需要的文件与布局都复制到自己的project下面。
3、实际上就按照Demo中所给的代码使用即可,先来看下Demo是怎么使用的。
这里只是简单介绍它的使用注意点和几个方法。
(1)注意继承IXListViewListener,实现里面的两个方法。
(2)上拉刷新与下拉加载的使能与监听的设置
//下拉加载使能 mListView.setPullLoadEnable(true); //上拉刷新使能 mListView.setPullRefreshEnable(true); //上拉刷新与下拉加载监听 mListView.setXListViewListener(this); //设置单个点击事件的监听 mXListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { } });
(3)关于方法
下拉刷新的方法,这里使用handler的原因是UI线程不允许对其他线程对他进行操作,因此使用handler。
@Override public void onRefresh() { mHandler.postDelayed(new Runnable() { @Override public void run() { start = ++refreshCnt; items.clear(); //对items进行了重新赋值 geneItems(); //重新设置adapter mAdapter = new ArrayAdapter<String>(XListViewActivity.this, R.layout.list_item, items); mListView.setAdapter(mAdapter); onLoad(); } }, 2000); }
停止刷新
private void onLoad() { mListView.stopRefresh(); mListView.stopLoadMore(); mListView.setRefreshTime("刚刚"); }
上拉加载
@Override public void onLoadMore() { mHandler.postDelayed(new Runnable() { @Override public void run() { geneItems(); mAdapter.notifyDataSetChanged(); onLoad(); } }, 2000); }
xListView使用实例
1、布局调用<com.example.daydayup.xlistview.XListView android:id="@+id/xlistview_promotionrequest_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="@color/white" > </com.example.daydayup.xlistview.XListView> </LinearLayout>
2、xListView的Adapter(布局就是按照上面图片展示的xLisView的item布局的)
public class SimpleListAdapter extends BaseAdapter { private List<PromotionReqTable> mData; private LayoutInflater mInflater; public SimpleListAdapter(LayoutInflater mInflater, List<PromotionReqTable> mData) { this.mInflater = mInflater; this.mData = mData; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh=null; PromotionReqTable data=mData.get(position); if(convertView==null){ vh=new ViewHolder(); convertView=mInflater.inflate(R.layout.activity_prmotionrequest_listview_item,null,false); vh.mTextViewCusName= (TextView) convertView.findViewById(R.id.textview_promotionrequest_cusname); vh.mTextViewCusBumber= (TextView) convertView.findViewById(R.id.textview_promotionrequest_number); vh.mTextViewIsPass= (TextView) convertView.findViewById(R.id.textview_promotionrequest_ispass); vh.mTextViewTime= (TextView) convertView.findViewById(R.id.textview_promotionrequest_time); convertView.setTag(vh); }else{ vh= (ViewHolder) convertView.getTag(); } vh.mTextViewCusName.setText(data.getCusname()); vh.mTextViewCusBumber.setText(data.getPromotionnum()); vh.mTextViewTime.setText(data.getTime()); vh.mTextViewIsPass.setText(data.getIspass()); return convertView; } class ViewHolder{ TextView mTextViewCusName; TextView mTextViewIsPass; TextView mTextViewTime; TextView mTextViewCusBumber; } }
3、设置xListView
public class PromotionRequestFragment extends BaseFragment implements XListView.IXListViewListener,View.OnClickListener,CompoundButton.OnCheckedChangeListener{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mXListView= (XListView) view.findViewById(R.id.xlistview_promotionrequest_data); initelistview(); } private void initelistview(){ mHandler = new Handler(); mAdapter=new SimpleListAdapter(mInflater,mData); mXListView.setAdapter(mAdapter); mXListView.setXListViewListener(this); mXListView.setPullRefreshEnable(true); mXListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mTextViewProDetailDialogCusName.setText(mData.get(position).getCusname()); mTextViewProDetailDialogStartTime.setText(mData.get(position).getTime()); mTextViewProDetailDialogEndTime.setText(mData.get(position).getTime()); mDialogProDetail.show(); } }); }
4、XListView的三个方法(xListView的item的改变实际上就是对Data重新赋值,然后重新设置Adapter,之重新设置xListView)
@Override public void onRefresh() { final SimpleDateFormat formatupdate=new SimpleDateFormat("MM-dd HH:mm"); final Date mDateupdate=new Date(); mHandler.postDelayed(new Runnable() { @Override public void run() { mData.clear(); mData = DbXutilsOperation.findAll(PromotionReqTable.class); // mAdapter.notifyDataSetChanged(); mAdapter = new SimpleListAdapter(mInflater, mData); mXListView.setAdapter(mAdapter); onLoad(formatupdate.format(mDateupdate)); } }, 2000); } @Override public void onLoadMore() { final SimpleDateFormat formatupdate=new SimpleDateFormat("MM-dd HH:mm"); final Date mDateupdate=new Date(); mHandler.postDelayed(new Runnable() { @Override public void run() { mData = DbXutilsOperation.findAll(PromotionReqTable.class); mAdapter.notifyDataSetChanged(); onLoad(formatupdate.format(mDateupdate)); } }, 2000); } private void onLoad(String time) { mXListView.stopRefresh(); mXListView.stopLoadMore(); mXListView.setRefreshTime(time); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.textview_prmotionreq_alldata: dialog.show();break; case R.id.button_promotionreq_back:getActivity().finish();break; case R.id.button_promotionreq_add:dialog.dismiss(); Intent intent=new Intent(getActivity(), PromotionManagerAdd.class); startActivity(intent); break; } }
实现效果与图片展示基本一致,但是progressbar是默认的样式,灰色的,要想修改需要我们自己进行设置。
xListView修改ProgressBar样式
1、自定义圆形<?xml version="1.0" encoding="utf-8"?> <!-- 自定义圆形progressbar的颜色和图片 --> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="360"> <shape android:shape="ring" android:innerRadiusRatio="3" android:thicknessRatio="8" android:useLevel="false" > <gradient android:type="sweep" android:useLevel="false" android:startColor="#bcff0000" android:endColor="#00FF0000" android:centerY="0.5" /> </shape> </rotate>
2、在xListView的Header布局中的ProgressBar设置属性
,将图片换成自己绘制的图片
android:indeterminateDrawable="@drawable/circle_progressbar_style"
样式设置
<ProgressBar android:id="@+id/xlistview_header_progressbar" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignLeft="@id/xlistview_header_text" android:layout_centerVertical="true" android:layout_marginLeft="-40dp" android:indeterminate="false" android:indeterminateDrawable="@drawable/circle_progressbar_style" android:visibility="invisible" android:indeterminateDuration="700" android:indeterminateBehavior="repeat" android:indeterminateOnly="true" /> </RelativeLayout>
这样就可以实现上面图片展示的ProgressBar的红色圈的样式了
相关文章推荐
- Android Service创建USB HOST通信
- [FAQ14489]Android L SIM卡更新语言问题, 自适应为SIM卡的语言问题
- Android Studio(开发工具)
- Android 热敏打印机打印二维码
- Android_06_横竖屏切换
- Android View和ViewGroup
- 解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码
- Android常见的按钮监听器实现方式
- Windows环境下Android Studio v1.0安装教程
- Android屏幕适配全攻略(最权威的官方适配指导)
- android图片处理工具类
- [置顶] Android调用JNI的简单实例(附详细步骤)
- Android Java混淆(ProGuard)
- CoordinatorLayout与滚动的处理
- Android 实现录音和监听声音大小实现话筒动画效果
- 调用Android系统接口获取不到TF卡路径时
- 有关Android getMeasuredHeight()与getHeight()的区别
- Android:资源 id 及资源 id 的动态获取
- hello-jni Android.mk文件简析
- android 定时拉取数据