分页刷新(SwipeRefreshLayout+SwipeMenuRecyclerView)
生活随笔
收集整理的這篇文章主要介紹了
分页刷新(SwipeRefreshLayout+SwipeMenuRecyclerView)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、布局文件設置
<android.support.v4.widget.SwipeRefreshLayoutandroid:id="@+id/swipe_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/rl_todayearning_01"app:layout_behavior="@string/appbar_scrolling_view_behavior"><com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerViewandroid:id="@+id/recycler_view"android:layout_width="match_parent"android:layout_height="match_parent"/></android.support.v4.widget.SwipeRefreshLayout>2、Adapter的設置 package com.gloiot.hygooilstation.ui.adapter; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.gloiot.hygooilstation.R; import com.gloiot.hygooilstation.ui.widget.swipe.OnItemClickListener; import com.yanzhenjie.recyclerview.swipe.SwipeMenuAdapter; import java.util.List;/*** 今日收益列表(RecyclerView)適配器* Created by Dlt on 2017/6/2 15:32*/ public class TodayEarning1Adapter extends SwipeMenuAdapter<TodayEarning1Adapter.ViewHolder> {static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {TextView tv_oddNum, tv_time, tv_type, tv_oilsPrice, tv_jiaoyi, tv_daozhang;OnItemClickListener mOnItemClickListener;public ViewHolder(View itemView) {super(itemView);itemView.setOnClickListener(this);tv_oddNum = (TextView) itemView.findViewById(R.id.tv_oddNum);tv_time = (TextView) itemView.findViewById(R.id.tv_time);tv_type = (TextView) itemView.findViewById(R.id.tv_type);tv_oilsPrice = (TextView) itemView.findViewById(R.id.tv_oilsPrice);tv_jiaoyi = (TextView) itemView.findViewById(R.id.tv_jiaoyi);tv_daozhang = (TextView) itemView.findViewById(R.id.tv_daozhang);}public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.mOnItemClickListener = onItemClickListener;}public void setData(String oddNum, String time, String type, String oilsPrice, String jiaoyi, String daozhang) {this.tv_oddNum.setText("交易單號:" + oddNum);this.tv_time.setText(time);this.tv_type.setText(type);this.tv_oilsPrice.setText(oilsPrice + "/L");this.tv_jiaoyi.setText(jiaoyi);this.tv_daozhang.setText(daozhang);}@Overridepublic void onClick(View v) {if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick(getAdapterPosition());}}}private List<String[]> list;private OnItemClickListener mOnItemClickListener;public TodayEarning1Adapter(List<String[]> list) {this.list = list;}public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.mOnItemClickListener = onItemClickListener;}@Overridepublic int getItemCount() {return list == null ? 0 : list.size();}@Overridepublic View onCreateContentView(ViewGroup parent, int viewType) {return LayoutInflater.from(parent.getContext()).inflate(R.layout.item_trade_todayearning_withrevoke1, parent, false);}@Overridepublic TodayEarning1Adapter.ViewHolder onCompatCreateViewHolder(View realContentView, int viewType) {return new ViewHolder(realContentView);}@Overridepublic void onBindViewHolder(TodayEarning1Adapter.ViewHolder holder, int position) {holder.setData(list.get(position)[0], list.get(position)[1], list.get(position)[4],list.get(position)[5], list.get(position)[2], list.get(position)[3]);holder.setOnItemClickListener(mOnItemClickListener);} }
3、Todayearning1Activity中具體設置
package com.gloiot.hygooilstation.ui.activity.trade;import android.graphics.Color; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.TextView;import com.gloiot.hygooilstation.R; import com.gloiot.hygooilstation.server.network.RequestAction; import com.gloiot.hygooilstation.ui.activity.BaseActivity; import com.gloiot.hygooilstation.ui.adapter.TodayEarning1Adapter; import com.gloiot.hygooilstation.ui.widget.MyDialogBuilder; import com.gloiot.hygooilstation.ui.widget.swipe.OnItemClickListener; import com.gloiot.hygooilstation.utils.CommonUtlis; import com.gloiot.hygooilstation.utils.L; import com.gloiot.hygooilstation.utils.MToast; import com.gloiot.hygooilstation.utils.MyPromptDialogUtils; import com.gloiot.hygooilstation.view.ListViewDecoration30; import com.yanzhenjie.recyclerview.swipe.Closeable; import com.yanzhenjie.recyclerview.swipe.OnSwipeMenuItemClickListener; import com.yanzhenjie.recyclerview.swipe.SwipeMenu; import com.yanzhenjie.recyclerview.swipe.SwipeMenuCreator; import com.yanzhenjie.recyclerview.swipe.SwipeMenuItem; import com.yanzhenjie.recyclerview.swipe.SwipeMenuRecyclerView;import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;import static com.gloiot.hygooilstation.R.id.tv_listview_no;/*** 今日收益(用RecyclerView做)* Created by Dlt on 2017/6/2 15:20*/ public class Todayearning1Activity extends BaseActivity implements BaseActivity.RequestErrorCallback {private TextView mTvNoData;private TextView tv_todayearning_jiaoyi, tv_todayearning_daozhang;private SwipeRefreshLayout mSwipeRefreshLayout;private SwipeMenuRecyclerView mSwipeMenuRecyclerView;private List<String[]> list = new ArrayList<>();private String totalMoney, daozhangMoney;private MyDialogBuilder myDialogBuilder;private String deleteOddNum;//刪除位置的交易單號private TodayEarning1Adapter mMenuAdapter;private int page = 0;@Overridepublic int initResource() {return R.layout.activity_todayearning1;}@Overridepublic void initComponent() {tv_todayearning_jiaoyi = (TextView) findViewById(R.id.tv_todayearning_jiaoyi);tv_todayearning_daozhang = (TextView) findViewById(R.id.tv_todayearning_daozhang);mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_layout);mSwipeMenuRecyclerView = (SwipeMenuRecyclerView) findViewById(R.id.recycler_view);mTvNoData = (TextView) findViewById(tv_listview_no);}@Overridepublic void initData() {CommonUtlis.setTitleBar(this, true, "今日收益", ""); // requestHandleArrayList.add(requestAction.todayearning(this)); mSwipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.orange_FF690C));initSwipeMenuRecyclerView();setRequestErrorCallback(this);mSwipeRefreshLayout.setOnRefreshListener(mOnRefreshListener);request(0, 0, 1, 0);}private void initSwipeMenuRecyclerView() {mSwipeMenuRecyclerView.setLayoutManager(new LinearLayoutManager(this));// 布局管理器。mSwipeMenuRecyclerView.setHasFixedSize(true);// 如果Item夠簡單,高度是確定的,打開FixSize將提高性能。mSwipeMenuRecyclerView.setItemAnimator(new DefaultItemAnimator());// 設置Item默認動畫,加也行,不加也行。mSwipeMenuRecyclerView.addItemDecoration(new ListViewDecoration30(mContext));// 添加分割線。// 添加滾動監聽。 mSwipeMenuRecyclerView.addOnScrollListener(mOnScrollListener);// 為SwipeRecyclerView的Item創建菜單// 設置菜單創建器。 mSwipeMenuRecyclerView.setSwipeMenuCreator(swipeMenuCreator);// 設置菜單Item點擊監聽。 mSwipeMenuRecyclerView.setSwipeMenuItemClickListener(menuItemClickListener);}/*** @param requestType 請求類型,初始請求=0,刷新=1,加載=2* @param page 頁數* @param requestTag 請求tag,請求成功后用于區分是哪個請求* @param showLoad 是否顯示請求加載框 0--顯示, -1--不顯示*/private void request(int requestType, int page, int requestTag, int showLoad) {requestHandleArrayList.add(requestAction.todayearningNew(this, requestType, page, requestTag, showLoad));}/*** 刷新監聽。*/private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {if (!list.isEmpty()) {mMenuAdapter.notifyDataSetChanged();}list.clear();request(1, 0, 2, -1);}};/*** 加載更多*/private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {if (!recyclerView.canScrollVertically(1)) {// 手指不能向上滑動了// TODO 這里有個注意的地方,如果你剛進來時沒有數據,但是設置了適配器,這個時候就會觸發加載更多,需要開發者判斷下是否有數據,如果有數據才去加載更多。if (list.size() != 0) {if (page > 0) {request(2, page + 1, 3, 0);} else {MToast.showToast(mContext, "已無數據加載");}}}}};private void processData() {mMenuAdapter = new TodayEarning1Adapter(list);mMenuAdapter.setOnItemClickListener(onItemClickListener);mSwipeMenuRecyclerView.setAdapter(mMenuAdapter);}/*** 條目點擊監聽*/private OnItemClickListener onItemClickListener = new OnItemClickListener() {@Overridepublic void onItemClick(int position) { // Toast.makeText(mContext, "我是第" + position + "條。", Toast.LENGTH_SHORT).show(); }};/*** 菜單創建器。在Item要創建菜單的時候調用。*/private SwipeMenuCreator swipeMenuCreator = new SwipeMenuCreator() {@Overridepublic void onCreateMenu(SwipeMenu swipeLeftMenu, SwipeMenu swipeRightMenu, int viewType) {// MATCH_PARENT 自適應高度,保持和內容一樣高;也可以指定菜單具體高度,也可以用WRAP_CONTENT。int height = ViewGroup.LayoutParams.MATCH_PARENT;// int width = getResources().getDimensionPixelSize(R.dimen.item_height);int width = 200;//單位為px,沒有適配性// 添加右側的,如果不添加,則右側不會出現菜單。 {SwipeMenuItem deleteItem = new SwipeMenuItem(mContext).setBackgroundDrawable(R.color.red_FF6D63).setText("撤單") // 文字,還可以設置文字顏色,大小等。。 .setTextColor(Color.WHITE).setWidth(width).setHeight(height);swipeRightMenu.addMenuItem(deleteItem);// 添加一個按鈕到右側側菜單。 }}};/*** 菜單點擊監聽*/private OnSwipeMenuItemClickListener menuItemClickListener = new OnSwipeMenuItemClickListener() {/*** Item的菜單被點擊的時候調用。* @param closeable closeable. 用來關閉菜單。* @param adapterPosition adapterPosition. 這個菜單所在的item在Adapter中position。* @param menuPosition menuPosition. 這個菜單的position。比如你為某個Item創建了2個MenuItem,那么這個position可能是是 0、1,* @param direction 如果是左側菜單,值是:SwipeMenuRecyclerView#LEFT_DIRECTION,如果是右側菜單,值是:SwipeMenuRecyclerView#RIGHT_DIRECTION.*/@Overridepublic void onItemClick(Closeable closeable, int adapterPosition, int menuPosition, int direction) {closeable.smoothCloseMenu();// 關閉被點擊的菜單。// TODO 如果是刪除:推薦調用Adapter.notifyItemRemoved(position),不推薦Adapter.notifyDataSetChanged();if (menuPosition == 0) {// 撤單按鈕被點擊。final int p = adapterPosition;myDialogBuilder = MyDialogBuilder.getInstance(mContext);myDialogBuilder.withIcon(R.mipmap.iconfont_gantanhao).withContene("確定要撤單嗎?").withEffects(MyDialogBuilder.SlideTop, MyDialogBuilder.SlideTopDismiss).setBtnClick("確定", MyDialogBuilder.BtnNormal, new View.OnClickListener() {@Overridepublic void onClick(View v) {myDialogBuilder.dismissNoAnimator();deleteOddNum = list.get(p)[0];//商品訂單號 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date curDate = new Date(System.currentTimeMillis());String currentTime = formatter.format(curDate);//獲取手機系統時間是個漏洞,用戶可手動更改時間。 requestHandleArrayList.add(requestAction.rongyunRevoke(Todayearning1Activity.this, deleteOddNum, currentTime));}}).setBtnClick("取消", MyDialogBuilder.BtnCancel, new View.OnClickListener() {@Overridepublic void onClick(View v) {myDialogBuilder.dismiss();}}).show();}}};@Overridepublic void requestSuccess(int requestTag, JSONObject response, int showLoad) throws JSONException {super.requestSuccess(requestTag, response, showLoad);switch (requestTag) { // case RequestAction.TAG_TODAYEARNING: // totalMoney = response.getString("總金額"); // daozhangMoney = response.getString("到賬金額"); // tv_todayearning_jiaoyi.setText(totalMoney); // tv_todayearning_daozhang.setText(daozhangMoney); // // int num = Integer.parseInt(response.getString("條數")); // if (num != 0) { // JSONArray jsonArray = response.getJSONArray("列表"); // for (int i = 0; i < jsonArray.length(); i++) { // String[] a = new String[6]; // JSONObject jsonObject = (JSONObject) jsonArray.get(i); // a[0] = jsonObject.getString("商品訂單號"); // a[1] = jsonObject.getString("錄入時間"); // a[2] = jsonObject.getString("交易金額"); // a[3] = jsonObject.getString("到賬金額"); // a[4] = jsonObject.getString("油品型號"); // a[5] = jsonObject.getString("市場價"); // list.add(a); // } // tv_listview_no.setText(""); // processData(); // } else { // tv_listview_no.setText("無數據"); // } // break;case 1:processResponseData(response, false);break;case 2:mSwipeRefreshLayout.setRefreshing(false);processResponseData(response, false);break;case 3:processResponseData(response, true);break;case RequestAction.TAG_RONGYUNREVOKE:// log.e("融云撤單", "--" + response.toString()); myDialogBuilder = MyDialogBuilder.getInstance(mContext);myDialogBuilder.setCancelable(false);myDialogBuilder.withTitie("撤單").withEffects(MyDialogBuilder.SlideTop, MyDialogBuilder.SlideTopDismiss).setEtClick(1, null, "請輸入客戶收到的驗證碼", MyDialogBuilder.EtNum)//注意選數字格式 EtNum.setBtnClick("確定", MyDialogBuilder.BtnNormal, new View.OnClickListener() {@Overridepublic void onClick(View v) {EditText et_pwd = (EditText) myDialogBuilder.getDialogView().findViewById(100 + 1);String yzm = et_pwd.getText().toString().trim();if (TextUtils.isEmpty(yzm)) {MToast.showToast(mContext, "請輸入驗證碼");} else {myDialogBuilder.dismissNoAnimator();requestHandleArrayList.add(requestAction.revoke(Todayearning1Activity.this, deleteOddNum, yzm));}}}).setBtnClick("取消", MyDialogBuilder.BtnCancel, new View.OnClickListener() {@Overridepublic void onClick(View v) {myDialogBuilder.dismiss();}}).show();break;case RequestAction.TAG_REVOKE:MToast.showToast(mContext, "撤單成功");//然后需要刷新一遍數據,不需要再次調接口。因為頭部除列表外有數據同步更新,所以還是要重新請求。 // if (deletePosition != -1) {//為了保險,其實只要刪除成功,這里肯定不等于-1 // list.remove(deletePosition); // processData(true); // } // deletePosition = -1;// list.clear(); // requestHandleArrayList.add(requestAction.todayearning(this));if (!list.isEmpty()) {mMenuAdapter.notifyDataSetChanged();}list.clear();request(1, 0, 2, -1);break;}}/*** 處理請求返回數據** @param response* @param isLoadMore*/private void processResponseData(JSONObject response, boolean isLoadMore) throws JSONException {L.e("今日收益列表", response.toString());totalMoney = response.getString("總金額");daozhangMoney = response.getString("到賬金額");tv_todayearning_jiaoyi.setText(totalMoney);tv_todayearning_daozhang.setText(daozhangMoney);int num = Integer.parseInt(response.getString("條數"));if (num != 0) {JSONArray jsonArray = response.getJSONArray("列表");for (int i = 0; i < jsonArray.length(); i++) {String[] a = new String[6];JSONObject jsonObject = (JSONObject) jsonArray.get(i);a[0] = jsonObject.getString("商品訂單號");a[1] = jsonObject.getString("錄入時間");a[2] = jsonObject.getString("交易金額");a[3] = jsonObject.getString("到賬金額");a[4] = jsonObject.getString("油品型號");a[5] = jsonObject.getString("市場價");list.add(a);}page = num == 10 ? Integer.parseInt(response.getString("頁數")) : 0;mSwipeMenuRecyclerView.setVisibility(View.VISIBLE);mTvNoData.setVisibility(View.GONE);if (isLoadMore) {mMenuAdapter.notifyDataSetChanged();} else {processData();}} else {if (isLoadMore) {MToast.showToast(mContext, "已無數據加載");} else {mSwipeMenuRecyclerView.setVisibility(View.GONE);mTvNoData.setVisibility(View.VISIBLE);mTvNoData.setText("無數據");}}}@Overridepublic void requestErrorcallback(int requestTag, JSONObject response) throws Exception {switch (requestTag) {case RequestAction.TAG_RONGYUNREVOKE:MyPromptDialogUtils.showPrompt(mContext, response.getString("狀態")); // MToast.showToast(mContext, response.getString("狀態"));break;default:MToast.showToast(mContext, response.getString("狀態"));break;}} }
?
?轉載于:https://www.cnblogs.com/jingAndroid/p/6994220.html
總結
以上是生活随笔為你收集整理的分页刷新(SwipeRefreshLayout+SwipeMenuRecyclerView)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chattr 文件隐藏属性
- 下一篇: mysql通过字段凝视查找字段名称