码迷,mamicode.com
首页 > 其他好文 > 详细

95秀-PullToRefreshListView 示例

时间:2016-04-14 01:20:24      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

技术分享 技术分享  
正在加载、暂无数据页面

public class RefreshGuideTool {

    private RelativeLayout rl_loading_guide;//整个View
    private LinearLayout ll_loading_guide_parent;//无数据时显示的布局
    private TextView tv_loading_guide;//什么都没有,下拉刷新
    private RelativeLayout mPgLoaing;//正在加载时显示的布局
    public RefreshGuideTool(View v) {
        rl_loading_guide = (RelativeLayout) v.findViewById(R.id.rl_loading_guide);
        ll_loading_guide_parent = (LinearLayout) v.findViewById(R.id.ll_show_img);
        tv_loading_guide = (TextView) v.findViewById(R.id.tv_loading_guide);
        mPgLoaing = (RelativeLayout) v.findViewById(R.id.pg_loading);
        ll_loading_guide_parent.setVisibility(View.GONE);
        mPgLoaing.setVisibility(View.VISIBLE);
    }
    public RefreshGuideTool(Activity activity) {
        rl_loading_guide = (RelativeLayout) activity.findViewById(R.id.rl_loading_guide);
        ll_loading_guide_parent = (LinearLayout) activity.findViewById(R.id.ll_show_img);
        tv_loading_guide = (TextView) activity.findViewById(R.id.tv_loading_guide);
        mPgLoaing = (RelativeLayout) activity.findViewById(R.id.pg_loading);
        ll_loading_guide_parent.setVisibility(View.GONE);
        mPgLoaing.setVisibility(View.VISIBLE);
    }
    public TextView getTvLoadingGuide() {
        return tv_loading_guide;
    }
    public void isShow(boolean isShow) {//设置是否显示“暂无数据”页面
        mPgLoaing.setVisibility(View.GONE);
        if (isShow) {
            rl_loading_guide.setVisibility(View.VISIBLE);
            ll_loading_guide_parent.setVisibility(View.VISIBLE);
        } else {
            rl_loading_guide.setVisibility(View.GONE);
            ll_loading_guide_parent.setVisibility(View.GONE);
        }
    }
    public void showProgressBar() {//显示“正在加载”页面
        rl_loading_guide.setVisibility(View.VISIBLE);
        ll_loading_guide_parent.setVisibility(View.GONE);
        mPgLoaing.setVisibility(View.VISIBLE);
    }
}  

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_loading_guide"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
        android:id="@+id/ll_show_img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="60dp"
        android:orientation="vertical"
        android:visibility="gone" >
        <ImageView
            android:id="@+id/iv_loading_guide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/pic_refresh_load_defalut" />
        <TextView
            android:id="@+id/tv_loading_guide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:clickable="true"
            android:gravity="center"
            android:paddingTop="4dp"
            android:src="@drawable/pic_refresh_load_defalut"
            android:text="暂无数据"
            android:textColor="@color/normal_line_color"
            android:textSize="15sp" />
    </LinearLayout>
    <RelativeLayout
        android:id="@+id/pg_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" >
        <ProgressBar
            android:id="@+id/pgs_default_loading"
            android:layout_width="@dimen/live_room_progress"
            android:layout_height="@dimen/live_room_progress"
            android:layout_centerInParent="true"
            android:indeterminate="true"
            android:indeterminateDrawable="@drawable/progressbar_video_drawable" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:src="@drawable/ic_default_loding_bg" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/pgs_default_loading"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center"
            android:layout_marginTop="30dp"
            android:gravity="center"
            android:src="@drawable/pic_refresh_load_defalut"
            android:text="正在加载..."
            android:textColor="@color/main_color"
            android:textSize="15sp" />
    </RelativeLayout>
</RelativeLayout>  


抽出的Activity父类

public abstract class BaseListPullRefreshActivity<T> extends BaseActivity implements OnRefreshListener2<ListView>, INetworkStateCallback {

    protected PullToRefreshListView mPullToRefreshListView;//listview能用的属性PullToRefreshListView也都能用
    protected RefreshGuideTool mRefreshGuideTool; //用于加载数据提醒(正在加载,暂无数据)
    protected List<T> mDatas;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    protected void init() {// 此方法一定要主动在oncreat中调用(代码封装的不合理)
        NetReceiver.register(this);
        mDatas = new ArrayList<T>();
        initView();
        asyncDownLoadData();
    }
    @Override
    public void onDestroy() {
        NetReceiver.unRegister(this);
        super.onDestroy();
    }
    @Override
    public void onNetworkAvailable() {
        asyncDownLoadData();
    }
    @Override
    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
        asyncDownLoadData();
    }
    @Override
    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
        asyncUpLoadData();
    }
    public PullToRefreshListView getPullToRefreshScorllView() {
        return mPullToRefreshListView;
    }
    public void setPullToRefreshScorllView(PullToRefreshListView mPullToRefreshListView) {
        this.mPullToRefreshListView = mPullToRefreshListView;
    }
    public List<T> getDatas() {
        return mDatas;
    }
    public void setDatas(List<T> mDatas) {
        this.mDatas = mDatas;
    }
    /**
     * 检查是否需要显示或隐藏刷新提示界面(没有数据时显示“暂无数据”)
     */
    protected void checkShowRefreshGuide(List<T> datas) {
        if (mRefreshGuideTool != null) {
            if (datas != null && datas.size() > 0) {
                mRefreshGuideTool.isShow(false);
            } else {
                mRefreshGuideTool.isShow(true);
            }
        }
    }
    /**
     * 异步加载数据
     */
    protected abstract void asyncDownLoadData();
    /**
     * 异步加载数据
     */
    protected abstract void asyncUpLoadData();
    /**
     * 初始化views
     */
    protected abstract void initView();
}


Activity

public class FamilyApplyManageActivity extends BaseListPullRefreshActivity<BaseUserBeanimplements OnClickListener, ManageOnClick {

    private FamilyApplyManageAdapter mAdapter;
    private int pageIndex = 1;// 请求页码
    private ImageView iv_clear;
    private PopupWindow mPopupWindow;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pageName = "申请管理";
        init();
    }
    @Override
    protected void initView() {
        setContentView(R.layout.activity_family_apply);
        TitleBar mTitleBar = new TitleBar(this);
        mTitleBar.setViewText("帮会详情""申请信息");
        iv_clear = (ImageView) findViewById(R.id.iv_clear);
        iv_clear.setOnClickListener(this);
        mPullToRefreshListView = (PullToRefreshListView) findViewById(R.id.lv_apply);
        mPullToRefreshListView.setOnRefreshListener(this);
        mPullToRefreshListView.setMode(Mode.BOTH);
        mAdapter = new FamilyApplyManageAdapter(thismDatas);
        mAdapter.setManageOnClickListener(this);
        mPullToRefreshListView.setAdapter(mAdapter);
        mRefreshGuideTool = new RefreshGuideTool(this);
        mPullToRefreshListView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                try {
                    //跳转到申请者的档案页面
                    AppUtil.goToUser(FamilyApplyManageActivity.this,
                            mDatas.get(position - mPullToRefreshListView.getRefreshableView().getHeaderViewsCount()).anchorId);
                } catch (Exception e) {
                }
            }
        });
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.iv_clear:
            popClearView(iv_clear);
            break;
        case R.id.fl_clear_menu//清理
            showConfirmDialog();
            break;
        default:
            break;
        }
    }
    /**
     * 弹出清空申请记录窗口
     */
    private void popClearView(View view) {
        View pop_layout = LayoutInflater.from(this).inflate(R.layout.item_famil_apply_popnull);
        FrameLayout fl_clear_menu = (FrameLayout) pop_layout.findViewById(R.id.fl_clear_menu);
        fl_clear_menu.setOnClickListener(this);
        mPopupWindow = new PopupWindow(pop_layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        mPopupWindow.setContentView(pop_layout);
        mPopupWindow.setFocusable(true);
        mPopupWindow.setOutsideTouchable(true);
        mPopupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
        mPopupWindow.getContentView().setClickable(true);
        mPopupWindow.getContentView().setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if ((keyCode == KeyEvent.KEYCODE_BACK) && mPopupWindow != null && mPopupWindow.isShowing()) {
                    mPopupWindow.dismiss();
                    return true;
                }
                return false;
            }
        });
        mPopupWindow.showAsDropDown(view, 0, ApplicationUtil.dip2px(6));
    }
    /**
     * 弹出确认清空申请记录对话框
     */
    private void showConfirmDialog() {
        ConfirmDialog mConfirmDialog = new ConfirmDialog(FamilyApplyManageActivity.this) {
            @Override
            public void onCancleClick(View v) {
                dismiss();
                if (mPopupWindow != null && mPopupWindow.isShowing()) {
                    mPopupWindow.dismiss();
                }
            }
            @Override
            public void onConfirmClick(View v) {
                ansyClearApplyInfor();
                dismiss();
            }
        };
        mConfirmDialog.getContentTextView().setText("确认清空申请记录?");
        mConfirmDialog.show();
    }
    /**
     * 管理员点击“清空申请记录”后访问服务器
     */
    private void ansyClearApplyInfor() {
        RequestParams params = new RequestParams();
        params.put("uid", AppUser.getInstance().getUser().getuId());
        params.put("session_id", AppUser.getInstance().getUser().getuSessionId());
        params.put("family_id", AppUser.getInstance().getUser().getUserFamily().getId());//申请加入的帮会id
        AsyncXiuHttpHelper.post(Constants.GROUP_APPLY_CLEAN, params, new OnHttpListener<JSONObject>() {
            @Override
            public void onHttpListener(boolean httpSuccessed, JSONObject obj) {
                Log.i("-bqt""=====点击清空申请记录后返回的数据:" + obj.toString());
                if (httpSuccessed) {
                    if (obj.optInt("result", -1) == 1) {
                        ApplicationUtil.showToast(FamilyApplyManageActivity.this"清理成功");
                        mDatas.clear();
                        mAdapter.notifyDataSetChanged();
                        checkShowRefreshGuide(mDatas);
                    } else {
                        ApplicationUtil.showToast(FamilyApplyManageActivity.this, obj.optString("msg""清理失败"));
                    }
                } else {
                    ApplicationUtil.showToast(FamilyApplyManageActivity.this"网络错误");
                }
                if (mPopupWindow != null && mPopupWindow.isShowing()) {
                    mPopupWindow.dismiss();
                }
            }
        });
    }
    /**
     * 获取申请加入帮会信息
     * @param isDownload true:下拉刷新; false:加载更多
     */
    private void ansyApplyInfor(boolean isDownload) {
        if (isDownload) {
            pageIndex = 1;
        }
        RequestParams params = new RequestParams();
        params.put("uid", AppUser.getInstance().getUser().getuId());
        params.put("session_id", AppUser.getInstance().getUser().getuSessionId());
        params.put("family_id", AppUser.getInstance().getUser().getUserFamily().getId());
        params.put("page_index"pageIndex + "");//页码
        AsyncXiuHttpHelper.post(Constants.GROUP_APPLY_LIST, params, new OnHttpListener<JSONObject>() {
            @Override
            public void onHttpListener(boolean httpSuccessed, JSONObject obj) {
                Log.i("-bqt""申请加入帮会列表返回数据:" + obj.toString());
                if (httpSuccessed) {
                    if (obj.optInt("result", -1) == 1) {
                        JSONArray jsonArray = obj.optJSONArray("family_join_list");
                        if (jsonArray != null && jsonArray.length() != 0) {
                            if (pageIndex == 1)
                                mDatas.clear();
                            for (int i = 0; i < jsonArray.length(); i++) {
                                BaseUserBean bean = new BaseUserBean(jsonArray.optJSONObject(i));
                                mDatas.add(bean);
                            }
                        }
                        pageIndex++;
                    } else {
                        ApplicationUtil.showToast(FamilyApplyManageActivity.this"数据获取失败");
                    }
                } else {
                    ApplicationUtil.showToast(FamilyApplyManageActivity.this"网络错误");
                }
                mPullToRefreshListView.onRefreshComplete();
                mAdapter.notifyDataSetChanged();
                checkShowRefreshGuide(mDatas);
            }
        });
    }
    /**
     * 管理员点击同意或拒绝后访问服务器。这是回调方法中调用的方法,其实可以直接将他设为回调方法的。
     * @param state 1 同意 ; 2 拒绝
     */
    private void ansyApplyManage(final int state, final BaseUserBean bean) {
        RequestParams params = new RequestParams();
        params.put("uid", AppUser.getInstance().getUser().getuId());
        params.put("session_id", AppUser.getInstance().getUser().getuSessionId());
        params.put("family_id", AppUser.getInstance().getUser().getUserFamily().getId());//申请加入[帮会]的id
        params.put("fm_uid", bean.anchorId + "");//申请加入帮会[用户]的id
        params.put("status", state + "");
        AsyncXiuHttpHelper.post(Constants.GROUP_APPLY_DEAL, params, new OnHttpListener<JSONObject>() {
            @Override
            public void onHttpListener(boolean httpSuccessed, JSONObject obj) {
                Log.i("-bqt""=====点击同意或拒绝后返回的数据:" + obj.toString());
                if (httpSuccessed) {
                    if (obj.optInt("result", -1) == 1) {
                        if (mDatas != null)
                            mDatas.remove(bean);
                        if (mAdapter != null)
                            mAdapter.notifyDataSetChanged();
                        checkShowRefreshGuide(mDatas);
                        if (state == 1) {
                            ApplicationUtil.showToast(FamilyApplyManageActivity.this"已同意");
                        } else {
                            ApplicationUtil.showToast(FamilyApplyManageActivity.this"已拒绝");
                        }
                    } else {
                        ApplicationUtil.showToast(FamilyApplyManageActivity.this, obj.optString("msg""操作失败"));
                    }
                } else {
                    ApplicationUtil.showToast(FamilyApplyManageActivity.this, R.string.unknow_err);
                }
            }
        });
    }
    @Override
    protected void asyncDownLoadData() {//下拉刷新
        ansyApplyInfor(true);
    }
    @Override
    protected void asyncUpLoadData() {//加载更多
        ansyApplyInfor(false);
    }
    @Override
    protected void checkShowRefreshGuide(List<BaseUserBean> datas) {
        super.checkShowRefreshGuide(datas);
        if (mDatas != null && mDatas.size() > 0) {
            iv_clear.setVisibility(View.VISIBLE);
        } else {
            iv_clear.setVisibility(View.INVISIBLE);
        }
    }
    @Override
    public void onManageClick(int type, BaseUserBean bean) {
        if (bean != null) {
            ansyApplyManage(type, bean);
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" >
    <include
        android:id="@+id/title_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/title_bar_height"
        layout="@layout/view_top_bar2" />
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:id="@+id/lv_apply"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/title_bar"
        android:descendantFocusability="afterDescendants"
        android:divider="@color/line_divider"
        android:dividerHeight="0.1dp"
        android:footerDividersEnabled="true"
        android:listSelector="@android:color/transparent"
        android:scrollbarThumbVertical="@drawable/scrollbar"
        ptr:ptrAnimationStyle="rotate"
        ptr:ptrDrawableEnd="@drawable/default_ptr_flip_bottom"
        ptr:ptrDrawableStart="@drawable/default_ptr_flip_bottom"
        ptr:ptrHeaderTextColor="@color/light_gray" />
    <ImageView
        android:id="@+id/iv_clear"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_centerVertical="true"
        android:src="@drawable/family_more_selector"
        android:visibility="gone" />
    <include
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/title_bar"
        layout="@layout/item_loading_error_layout" />
</RelativeLayout>  


adapter

public class FamilyApplyManageAdapter extends BaseAdapter implements OnClickListener{

    private Activity mActivity;
    private List<BaseUserBean> mList;
    private ViewHolder mViewHolder;
    private ManageOnClick manageOnClickListener;
    /**
     * 管理申请加入帮会的适配器
     */
    public FamilyApplyManageAdapter(Activity activity, List<BaseUserBean> list) {
        mActivity = activity;
        mList = list;
    }
    public void setManageOnClickListener(ManageOnClick manageOnClickListener) {
        this.manageOnClickListener = manageOnClickListener;
    }
    @Override
    public int getCount() {
        return mList == null ? 0 : mList.size();
    }
    @Override
    public Object getItem(int position) {
        return mList == null ? null : mList.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null || convertView.getTag() == null) {
            convertView = View.inflate(mActivity, R.layout.item_family_apply_layoutnull);
            mViewHolder = new ViewHolder();
            mViewHolder.iv_head = (ImageView) convertView.findViewById(R.id.iv_head);
            mViewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
            mViewHolder.tv_agree = (TextView) convertView.findViewById(R.id.tv_agree);
            mViewHolder.tv_disagree = (TextView) convertView.findViewById(R.id.tv_disagree);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) convertView.getTag();
        }
        BaseUserBean bean = mList.get(position);
        if (bean != null) {
            mViewHolder.tv_name.setText(bean.anr_nick_name);//昵称
            ImageHelper.loadImage(bean.anr_imageUrlmViewHolder.iv_head, R.drawable.img_user_icon);
            mViewHolder.tv_agree.setTag(bean);
            mViewHolder.tv_agree.setOnClickListener(this);
            mViewHolder.tv_disagree.setTag(bean);
            mViewHolder.tv_disagree.setOnClickListener(this);
        }
        return convertView;
    }
    public static class ViewHolder {
        public ImageView iv_head;// 头像
        public TextView tv_name;// 名字
        public TextView tv_agree;//同意
        public TextView tv_disagree;// 拒绝
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.tv_disagree:
            BaseUserBean baseUserBean = (BaseUserBean) v.getTag();
            if (baseUserBean != null) {
                if(manageOnClickListener != null ) manageOnClickListener.onManageClick(2, baseUserBean);
            }
            break;
        case R.id.tv_agree:
            BaseUserBean bean = (BaseUserBean) v.getTag();
            if (bean != null) {
                if(manageOnClickListener != null ) manageOnClickListener.onManageClick(1, bean);
            }
            break;
        default:
            break;
        }
    }
    /****************************************
     * 
     * interface 
     * 
     ****************************************/
    public interface ManageOnClick{
        /**
         *  管理员点击同意或拒绝后回调
         */
        void onManageClick(int type , BaseUserBean bean);
    }
}


技术分享
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/normal_item_selector_no_line"
    android:minHeight="88dp" >
    <View
        android:layout_width="match_parent"
        android:layout_height="0.1px"
        android:layout_marginTop="88dp"
        android:background="@color/line_divider" />
    <ImageView
        android:id="@+id/iv_head"
        android:layout_width="62dp"
        android:layout_height="62dp"
        android:layout_marginTop="1dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="21dp"
        android:src="@drawable/img_user_icon" />
    <ImageView
        android:id="@+id/iv_head_cricle"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:background="@drawable/bg_family_head" />
    <TextView
        android:id="@+id/tv_agree"
        android:layout_width="44dp"
        android:layout_height="28dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="20dp"
        android:background="@drawable/family_apply_ty_bg_selector"
        android:clickable="true"
        android:gravity="center"
        android:text="同意"
        android:textColor="@drawable/family_apply_ty_selector"
        android:textSize="12sp" />
    <TextView
        android:id="@+id/tv_disagree"
        android:layout_width="44dp"
        android:layout_height="28dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="24dp"
        android:layout_marginRight="12dp"
        android:layout_toLeftOf="@id/tv_agree"
        android:background="@drawable/family_apply_jj_bg_selector"
        android:clickable="true"
        android:gravity="center"
        android:text="拒绝"
        android:textColor="@drawable/family_apply_jj_selector"
        android:textSize="12sp" />
    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="26dp"
        android:layout_toLeftOf="@id/tv_disagree"
        android:layout_toRightOf="@id/iv_head"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="包青天包青天,包青天"
        android:textColor="@color/charts_nick_name"
        android:textSize="13sp" />
    <TextView
        android:id="@+id/tv_describing"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_name"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="8dp"
        android:layout_toLeftOf="@id/tv_disagree"
        android:layout_toRightOf="@id/iv_head"
        android:ellipsize="end"
        android:singleLine="true"
        android:text="请求加入帮会"
        android:textColor="@color/tips_custom"
        android:textSize="11sp" />
</RelativeLayout>  






95秀-PullToRefreshListView 示例

标签:

原文地址:http://www.cnblogs.com/baiqiantao/p/5389432.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!