日常备份,接入广点通开屏、Banner
数据改成掉落日志和战斗日志(战斗日志咕了)
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
package cn.lemon.view.adapter;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 对应 ViewTypeManager
|
||||
* <p>
|
||||
* Created by linlongxin on 2017/9/20.
|
||||
*/
|
||||
|
||||
public class CustomMultiTypeAdapter extends RecyclerAdapter {
|
||||
|
||||
private final String TAG = "CustomMultiTypeAdapter";
|
||||
private List<Object> mViewsData;
|
||||
private ViewTypeManager mViewHolderManager;
|
||||
|
||||
|
||||
public CustomMultiTypeAdapter(Context context) {
|
||||
super(context);
|
||||
mViewsData = new ArrayList<>();
|
||||
mViewHolderManager = new ViewTypeManager();
|
||||
}
|
||||
|
||||
public void setViewHolderFactory(IViewHolderFactory factory) {
|
||||
if (factory == null) {
|
||||
return;
|
||||
}
|
||||
mViewHolderManager.setViewHolderFactory(factory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
if (viewType == STATUS_TYPE) {
|
||||
return new BaseViewHolder<>(mStatusView);
|
||||
} else {
|
||||
return mViewHolderManager.getViewHolder(parent, viewType);
|
||||
}
|
||||
}
|
||||
|
||||
// 弃用
|
||||
@Override
|
||||
public BaseViewHolder onCreateBaseViewHolder(ViewGroup parent, int viewType) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(BaseViewHolder holder, int position) {
|
||||
// 显示加载更多
|
||||
if (!mIsNoMoring && mLoadMoreEnable && !mIsLoadMoring && isValidLoadMore(position)) {
|
||||
mIsLoadMoring = true;
|
||||
setViewVisible(mLoadMoreLayout, true);
|
||||
setViewVisible(mLoadMoreView, true);
|
||||
setViewVisible(mLoadMoreError, false);
|
||||
setViewVisible(mNoMoreView, false);
|
||||
if (mLoadMoreAction != null) {
|
||||
log("load more");
|
||||
mLoadMoreAction.onAction();
|
||||
}
|
||||
} else {
|
||||
if (position < mViewsData.size()) {
|
||||
holder.setData(mViewsData.get(position));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
if (hasEndStatusView() && position == mViewCount - 1) {
|
||||
return STATUS_TYPE;
|
||||
}
|
||||
return mViewHolderManager.getViewType(position);
|
||||
}
|
||||
|
||||
public void add(int viewType) {
|
||||
add(new Object(), viewType);
|
||||
}
|
||||
|
||||
public <T> void add(T data, int viewType) {
|
||||
if (mIsNoMoring || data == null) {
|
||||
return;
|
||||
}
|
||||
mIsLoadMoring = false;
|
||||
mViewsData.add(data);
|
||||
int positionStart;
|
||||
if (hasEndStatusView()) {
|
||||
positionStart = mViewCount - 1;
|
||||
} else {
|
||||
positionStart = mViewCount;
|
||||
}
|
||||
mViewHolderManager.putViewType(positionStart, viewType);
|
||||
mViewCount++;
|
||||
notifyItemRangeInserted(positionStart, 1);
|
||||
}
|
||||
|
||||
public <T> void addAll(T[] data, int viewType) {
|
||||
addAll(Arrays.asList(data), viewType);
|
||||
}
|
||||
|
||||
public <T> void addAll(List<T> data, int viewType) {
|
||||
|
||||
if (mIsNoMoring || data == null || data.size() == 0) {
|
||||
return;
|
||||
}
|
||||
mIsLoadMoring = false;
|
||||
int size = data.size();
|
||||
mViewsData.addAll(data);
|
||||
int positionStart;
|
||||
if (hasEndStatusView()) {
|
||||
positionStart = mViewCount - 1;
|
||||
} else {
|
||||
positionStart = mViewCount;
|
||||
}
|
||||
for (int i = 0; i < size; i++) {
|
||||
mViewHolderManager.putViewType(positionStart + i, viewType);
|
||||
}
|
||||
mViewCount += size;
|
||||
notifyItemRangeInserted(positionStart, size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
if (mViewsData == null) {
|
||||
return;
|
||||
}
|
||||
mViewsData.clear();
|
||||
mViewCount = hasEndStatusView() ? 1 : 0;
|
||||
mIsNoMoring = false;
|
||||
mIsLoadMoring = false;
|
||||
setViewVisible(mLoadMoreLayout, false);
|
||||
setViewVisible(mNoMoreView, false);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package cn.lemon.view.adapter;
|
||||
|
||||
import android.os.Message;
|
||||
|
||||
/**
|
||||
* Created by linlongxin on 2018/3/29
|
||||
*/
|
||||
public interface IHandler {
|
||||
|
||||
void handMsg(Message message);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package cn.lemon.view.adapter;
|
||||
|
||||
import android.view.ViewGroup;
|
||||
|
||||
/**
|
||||
* 为避免反射,ViewType 交给开发者自己管理
|
||||
*
|
||||
* Created by linlongxin on 2017/9/20.
|
||||
*/
|
||||
|
||||
public interface IViewHolderFactory {
|
||||
|
||||
<V extends BaseViewHolder> V getViewHolder(ViewGroup parent, int viewType);
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package cn.lemon.view.adapter;
|
||||
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
/**
|
||||
* 为避免反射,ViewType 交给开发者自己管理(IViewTypeFactory)
|
||||
*
|
||||
* Created by linlongxin on 2017/9/20.
|
||||
*/
|
||||
|
||||
public class ViewTypeManager {
|
||||
|
||||
private final String TAG = "ViewTypeManager";
|
||||
// position to Type
|
||||
private SparseIntArray mPositionToTypeMap;
|
||||
|
||||
private IViewHolderFactory mViewHolderFactory;
|
||||
|
||||
public ViewTypeManager() {
|
||||
mPositionToTypeMap = new SparseIntArray();
|
||||
}
|
||||
|
||||
protected int getViewType(int position) {
|
||||
return mPositionToTypeMap.get(position);
|
||||
}
|
||||
|
||||
protected void putViewType(int position, int viewType) {
|
||||
mPositionToTypeMap.put(position, viewType);
|
||||
}
|
||||
|
||||
public void setViewHolderFactory(IViewHolderFactory factory){
|
||||
mViewHolderFactory = factory;
|
||||
}
|
||||
|
||||
protected <T extends BaseViewHolder> T getViewHolder(ViewGroup parent, int viewType){
|
||||
if (mViewHolderFactory != null) {
|
||||
return mViewHolderFactory.getViewHolder(parent, viewType);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package cn.lemon.view.adapter;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* Created by linlongxin on 2018/3/29
|
||||
*/
|
||||
public class WeakHandler extends Handler {
|
||||
|
||||
private WeakReference<IHandler> mHandler;
|
||||
|
||||
public WeakHandler(IHandler handler) {
|
||||
this.mHandler = new WeakReference<>(handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
super.handleMessage(msg);
|
||||
IHandler handler = mHandler.get();
|
||||
if (handler != null) {
|
||||
handler.handMsg(msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:state_pressed="true">
|
||||
<shape>
|
||||
<solid android:color="#BBBBBB"/>
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
</selector>
|
||||
Reference in New Issue
Block a user