项目中有用到RecycleView实现刷新功能,添加头部,功能终于实现了,记录一下(仍有待完善,各位看官,仅供参考)
首先是在一个activity里面使用fragment+viewPager实现功能需求activity界面布局;
首先activity layout布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<include layout="@layout/toolbar" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="1dp"
android:background="@color/white">
<View style="@style/WidthAdaptive" />
<com.flyco.tablayout.SlidingTabLayout
android:id="@+id/tablayout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
app:tl_indicator_color="@color/colorAccent"
app:tl_indicator_style="BLOCK"
app:tl_tab_space_equal="true"
app:tl_textAllCaps="true"
app:tl_textSelectColor="@color/colorText333"
app:tl_textUnselectColor="@color/colorText333"
app:tl_textsize="14sp" />
<View style="@style/WidthAdaptive" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent" android:layout_height="match_parent" />
</LinearLayout>
<com.gugu.gglc.widget.EmptyLayout
android:id="@+id/emptylayout"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
activity代码:
package com.gugu.gglc.module.personal.invite_rewards;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.widget.TextView;
import com.flyco.tablayout.SlidingTabLayout;
import com.gugu.gglc.R;
import com.gugu.gglc.module.personal.invite_rewards.invite.InviteFragment;
import com.gugu.gglc.module.personal.invite_rewards.rewards.RewardsFragment;
import com.gugu.gglc.widget.EmptyLayout;
import com.jaydenxiao.common.base.BaseActivity;
import java.util.ArrayList;
import butterknife.BindView;
/**
* 邀请奖励
*/
public class InviteRewardsActivity extends BaseActivity {
@BindView(R.id.tv_right)
TextView tv_immediately_invited;
@BindView(R.id.tablayout)
SlidingTabLayout tablayout;
@BindView(R.id.viewPager)
ViewPager viewPager;
@BindView(R.id.emptylayout)
EmptyLayout emptylayout;
private String[] titles = new String[]{"邀请记录", "奖励记录"};
private ArrayList<Fragment> fragments = new ArrayList<>();
private InviteFragment inviteFragment=new InviteFragment();
private RewardsFragment rewardsFragment =new RewardsFragment();
@Override
public int getLayoutId() {
return R.layout.activity_invite_rawards;
}
@Override
public void initPresenter() {
}
@Override
public void initView() {
initToolbar("邀请奖励", true, false, null);
initSet();
}
/**右边图标**/
private void initSet() {
tv_immediately_invited.setText("立即邀请");
tv_immediately_invited.setTextColor(ContextCompat.getColor(this, R.color.orage_invite));
fragments.add(inviteFragment);
fragments.add(rewardsFragment);
//设置数据
tablayout.setViewPager(viewPager, titles, this, fragments);
emptylayout.setVisibility(View.GONE);
}
protected void setStatus(){
emptylayout.setVisibility(View.GONE);
}
}
第一个fragment:
package com.gugu.gglc.module.personal.invite_rewards.invite;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.gugu.gglc.R;
import com.gugu.gglc.app.baseRecycleView.BaseLinearLayoutManager;
import com.gugu.gglc.bean.personal.InviteEntity;
import com.gugu.gglc.bean.personal.InviteRewardsEntity;
import com.gugu.gglc.constants.Global;
import com.gugu.gglc.widget.EmptyLayout;
import com.jaydenxiao.common.base.BaseFragment;
import com.jaydenxiao.common.commonutils.NetWorkUtils;
import butterknife.BindView;
import butterknife.OnClick;
/**
* 邀请奖励
*/
public class InviteFragment extends BaseFragment<InvitePresenter, InviteModel>
implements BaseQuickAdapter.RequestLoadMoreListener, InviteContract.View ,SwipeRefreshLayout.OnRefreshListener{
@BindView(R.id.recyclerView)
RecyclerView recyclerView;
@BindView(R.id.swipeLayout)
SwipeRefreshLayout swipeLayout;
@BindView(R.id.emptylayout_fragment_base)
EmptyLayout emptylayout;
InviteAdapter mAdapter;
private InviteRewardsEntity<InviteEntity> entityList;
private int pageNo = 1;
private TextView tv_invite_num,tv_investment_num;
private String phone;
private boolean mHidden;
public static InviteFragment newInstance(Bundle args) {
InviteFragment fragment = new InviteFragment();
fragment.setArguments(args);
return fragment;
}
@Override
protected int getLayoutResource() {
return R.layout.fragment_invite;
}
@Override
public void initPresenter() {
mPresenter.setVM(this, mModel);
}
@Override
protected void initView() {
if (!mHidden && isAdded()) {
emptylayout.setVisibility(View.GONE);
initApdater();
phone= Global.getAccountInfo().getMobile();
//获取信息
// mPresenter.setInviteInfo(phone,pageNo,10);
onRefresh();
}
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
mHidden=hidden;
}
private void initApdater() {
swipeLayout.setOnRefreshListener(this);
swipeLayout.setColorSchemeColors(ContextCompat.getColor(getContext(), R.color.text_blue_color),
ContextCompat.getColor(getContext(), R.color.text_orange));
recyclerView.setLayoutManager(new BaseLinearLayoutManager(getContext()));
mAdapter = new InviteAdapter(null);
mAdapter.setOnLoadMoreListener(this, recyclerView);
mAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);
mAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);
recyclerView.setAdapter(mAdapter);
addHeaderVew();
}
@Override
public void onRefresh() {
//释放资源
mAdapter.cancelAllTimers();
pageNo = 1;
mPresenter.setInviteInfo(phone,pageNo,10);
//刷新就停止加载更多
mAdapter.setEnableLoadMore(false);
//获取数据
swipeLayout.setRefreshing(false);
mAdapter.setEnableLoadMore(true);
}
private void addHeaderVew() {
View view = View.inflate(mActivity, R.layout.intvite_header, null);
tv_invite_num=view.findViewById(R.id.tv_invite_num);
tv_investment_num=view.findViewById(R.id.tv_investment_num);
mAdapter.addHeaderView(view);
}
@Override
public void onLoadMoreRequested() {
if (entityList.getList() != null &&
!entityList.getList().isEmpty() &&
entityList.isHasNext() ==true) {
mPresenter.setInviteInfo(phone,pageNo,10);
}
if (!NetWorkUtils.isNetConnected(getContext()))
mAdapter.loadMoreFail();
}
@Override
public void getInviteInfo(InviteRewardsEntity<InviteEntity> inviteInfo) {
if (inviteInfo !=null){
entityList=inviteInfo;
}else {
entityList =new InviteRewardsEntity<InviteEntity>();
int lenght=entityList.getList().size();
entityList.getList().clear();
mAdapter.notifyItemRangeRemoved(0,lenght);
entityList.getList().addAll(inviteInfo.getList());
mAdapter.notifyItemRangeInserted(lenght,inviteInfo.getList().size());
emptylayout.setVisibility(View.VISIBLE);
}
String investmentNum=inviteInfo.getInvestmentCount();
String inviteNum=inviteInfo.getRegistCount();
if (investmentNum !=null) tv_investment_num.setText(investmentNum);
else tv_invite_num.setText("0");
if (inviteNum !=null) tv_invite_num.setText(inviteNum);
else tv_invite_num.setText("0");
if (pageNo == 1) {
mAdapter.setNewData(entityList.getList());
} else {
mAdapter.addData(entityList.getList());
mAdapter.loadMoreComplete();
}
if (entityList.isHasNext() ==true) {
pageNo++;
} else {
mAdapter.loadMoreEnd();
}
//网络请求失败
onRequestError();
if (mAdapter.getItemCount() > 0) {
emptylayout.setErrorType(EmptyLayout.HIDE_LAYOUT);
} else {
emptylayout.setErrorType(EmptyLayout.NODATA);
}
}
private void onRequestError() {
if (mAdapter.getItemCount() == 0)
emptylayout.setErrorType(EmptyLayout.NETWORK_ERROR);
}
@Override
public void isSuccess(boolean success) {isSuccess(success);
}
/** 点击刷新 **/
@OnClick(R.id.emptylayout_fragment_base)
void onEmptyClick() {
emptylayout.setErrorType(EmptyLayout.NETWORK_LOADING);
mPresenter.setInviteInfo(phone,pageNo,20);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mAdapter != null) {
//释放资源
mAdapter.cancelAllTimers();
}
}
}
adapter侧代码:
package com.gugu.gglc.module.personal.invite_rewards.invite;
import android.content.Context;
import android.os.CountDownTimer;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.chad.library.adapter.base.entity.MultiItemEntity;
import com.gugu.gglc.R;
import com.gugu.gglc.bean.personal.InviteEntity;
import com.gugu.gglc.bean.personal.InviteRewardsEntity;
import java.util.ArrayList;
import java.util.List;
public class InviteAdapter extends BaseQuickAdapter<InviteEntity, BaseViewHolder> {
private SparseArray<CountDownTimer> countDownMap;
private Context context;
public InviteAdapter(@Nullable List<InviteEntity> data) {
super(R.layout.item_invite_list, data);
countDownMap = new SparseArray<>();
}
@Override
protected void convert(BaseViewHolder helper, InviteEntity item) {
helper.setText(R.id.tv_invite_project_name, item.getInvitationMobile())
.setText(R.id.tv_invite_project_userName, item.getInvitationName())
.setText(R.id.tv_invite_project_Date, item.getRegistDate().substring(0, 10))
.setText(R.id.tv_invite_project_time, item.getRegistDate().substring(10,19));
}
/**
* 清空资源
**/
public void cancelAllTimers() {
if (countDownMap == null) return;
if (countDownMap.size() != 0) {
for (int i = 0, length = countDownMap.size(); i < length; i++) {
CountDownTimer cdt = countDownMap.get(countDownMap.keyAt(i));
if (cdt != null) cdt.cancel();
}
}
}
// private MyViewHolder viewHolder;
// public InviteAdapter(List<InviteEntity> listBeans, Context context) {
// this.listBeans = listBeans;
// this.context = context;
// layoutInflater=LayoutInflater.from(context);
// }
// @Override
// public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// View view = layoutInflater.inflate(R.layout.item_invite_list,parent, false);
// viewHolder= new MyViewHolder(view);
// return viewHolder;
//
// }
//
// @Override
// public void onBindViewHolder(MyViewHolder holder, int position) {
// holder.tv_invite_project_name .setText(listBeans.get(position).getInvitationMobile());
// holder.tv_invite_project_userName .setText(listBeans.get(position).getInvitationName());
// holder.tv_invite_project_time .setText(listBeans.get(position).getRegistDate());
// }
//
// @Override
// public long getItemId(int position) {
// return position;
// }
//
// @Override
// public int getItemCount() {
// return listBeans.size();
// }
//
//
// class MyViewHolder extends RecyclerView.ViewHolder {
// private TextView tv_invite_project_name,tv_invite_project_userName,tv_invite_project_time;
//
//
//
// public MyViewHolder(View view) {
// super(view);
// tv_invite_project_name= view.findViewById(R.id.tv_invite_project_name);
// tv_invite_project_userName= view.findViewById(R.id.tv_invite_project_userName);
// tv_invite_project_time= view.findViewById(R.id.tv_invite_project_time);
// }
// }
}