Files
assistant-android/app/src/main/java/com/gh/gamecenter/message/MessageAdapter.java

150 lines
6.4 KiB
Java

package com.gh.gamecenter.message;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.gh.gamecenter.common.callback.OnListClickListener;
import com.gh.gamecenter.common.constant.ItemViewType;
import com.gh.common.databind.BindingAdapters;
import com.gh.gamecenter.common.utils.DialogHelper;
import com.gh.gamecenter.R;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.baselist.ListAdapter;
import com.gh.gamecenter.databinding.MessageItemBinding;
import com.gh.gamecenter.databinding.MessageItemTopBinding;
import com.gh.gamecenter.entity.MessageEntity;
import com.gh.gamecenter.entity.MessageUnreadEntity;
import java.util.ArrayList;
import java.util.List;
/**
* Created by khy on 23/03/18.
*/
public class MessageAdapter extends ListAdapter<MessageEntity> {
private OnListClickListener mClickListener;
private MessageUnreadEntity mUnreadEntity;
private MessageViewModel mViewModel;
private String mEntrance;
public MessageAdapter(Context context,
OnListClickListener clickListener,
String entrance,
MessageViewModel viewModel) {
super(context);
mClickListener = clickListener;
mEntrance = entrance;
mViewModel = viewModel;
}
@Override
protected void setListData(List<MessageEntity> updateData) {
int oldSize = TOP_ITEM_COUNT;
if (mEntityList != null && mEntityList.size() > 0) {
oldSize += mEntityList.size();
}
mEntityList = new ArrayList<>(updateData);
if (oldSize == TOP_ITEM_COUNT || oldSize > updateData.size()) {
notifyDataSetChanged();
} else {
notifyItemRangeInserted(oldSize, updateData.size() + TOP_ITEM_COUNT - oldSize);
}
}
void setMessageUnreadData(MessageUnreadEntity unreadEntity) {
mUnreadEntity = unreadEntity;
notifyItemChanged(0);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case ItemViewType.ITEM_HEADER:
MessageItemTopBinding topBinding = MessageItemTopBinding.inflate(mLayoutInflater, parent, false);
return new MessageTopViewHolder(topBinding, mClickListener);
case ItemViewType.ITEM_FOOTER:
View view = mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false);
return new FooterViewHolder(view, mClickListener);
case ItemViewType.ITEM_BODY:
MessageItemBinding binding = MessageItemBinding.inflate(mLayoutInflater, parent, false);
return new MessageItemViewHolder(binding, mClickListener, "消息_一级列表");
default:
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (getItemViewType(position)) {
case ItemViewType.ITEM_HEADER:
MessageTopViewHolder topViewHolder = (MessageTopViewHolder) holder;
topViewHolder.mBinding.messageInviteName.setTextColor(ContextCompat.getColor(mContext, R.color.text_title));
topViewHolder.mBinding.messageVoteName.setTextColor(ContextCompat.getColor(mContext, R.color.text_title));
topViewHolder.mBinding.messageServiceName.setTextColor(ContextCompat.getColor(mContext, R.color.text_title));
topViewHolder.mBinding.messageVote.setBackground(ContextCompat.getDrawable(mContext, R.drawable.reuse_listview_item_style));
topViewHolder.mBinding.messageService.setBackground(ContextCompat.getDrawable(mContext, R.drawable.reuse_listview_item_style));
topViewHolder.mBinding.messageInvite.setBackground(ContextCompat.getDrawable(mContext, R.drawable.reuse_listview_item_style));
BindingAdapters.setMessageUnread(topViewHolder.mBinding.unreadVote, mUnreadEntity.getVoteCount());
BindingAdapters.showHide(topViewHolder.mBinding.unreadVote, mUnreadEntity.getVoteCount() != 0);
BindingAdapters.setMessageUnread(topViewHolder.mBinding.unreadInvite, mUnreadEntity.getInvited() + mUnreadEntity.getSystemInvited());
BindingAdapters.showHide(topViewHolder.mBinding.unreadInvite, mUnreadEntity.getInvited() + mUnreadEntity.getSystemInvited() != 0);
BindingAdapters.setMessageUnread(topViewHolder.mBinding.unreadService, mUnreadEntity.getService());
BindingAdapters.showHide(topViewHolder.mBinding.unreadService, mUnreadEntity.getService() != 0);
break;
case ItemViewType.ITEM_BODY:
MessageItemViewHolder viewHolder = (MessageItemViewHolder) holder;
MessageEntity entity = mEntityList.get(position - TOP_ITEM_COUNT);
viewHolder.setMessageItem(entity, mContext, mEntrance);
viewHolder.itemView.setOnLongClickListener(v -> {
DialogHelper.showDialog(
mContext,
"删除消息",
"消息删除将不可恢复,确定删除吗?",
"确定",
"取消",
() -> mViewModel.deleteMessage(entity.getId()),
() -> {
},
true,
"消息中心",
"消息列表-删除");
return false;
});
break;
case ItemViewType.ITEM_FOOTER:
FooterViewHolder footerViewHolder = (FooterViewHolder) holder;
footerViewHolder.initFooterViewHolder(mIsLoading, mIsNetworkError, mIsOver);
footerViewHolder.initItemPadding();
break;
}
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return ItemViewType.ITEM_HEADER;
} else if (position == getItemCount() - 1) {
return ItemViewType.ITEM_FOOTER;
} else {
return ItemViewType.ITEM_BODY;
}
}
@Override
public int getItemCount() {
return mEntityList == null ? TOP_ITEM_COUNT : mEntityList.size() + FOOTER_ITEM_COUNT + TOP_ITEM_COUNT;
}
}