package com.forfan.bigbang.component.activity.share; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SwitchCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; import com.forfan.bigbang.R; import java.util.List; /** * Created by dim on 16/11/4. */ public interface Adapter { int VIEW_TYPE_EMPTY = 2; int VIEW_TYPE_DATA = 1; int VIEW_TYE_LOAD = 0; enum Status { LOADING, LOAD } class AppInfoAdapter extends RecyclerView.Adapter<BaseViewHolder> { private List<ShareAppInfo> mData; private Status status = Status.LOADING; public AppInfoAdapter(List<ShareAppInfo> data) { this.mData = data; } @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case VIEW_TYPE_EMPTY: return new EmptyViewHolder(parent); case VIEW_TYPE_DATA: return new AppInfoViewHolder(parent); case VIEW_TYE_LOAD: return new LoadingViewHolder(parent); } return null; } @Override public void onBindViewHolder(BaseViewHolder holder, int position) { } public void loadData() { status = Status.LOAD; notifyDataSetChanged(); } @Override public int getItemViewType(int position) { if (position == 0) { return mData.size() == 0 ? (status == Status.LOADING ? VIEW_TYE_LOAD : VIEW_TYPE_EMPTY) : VIEW_TYPE_DATA; } return VIEW_TYPE_DATA; } @Override public void onBindViewHolder(BaseViewHolder holder, int position, List<Object> payloads) { super.onBindViewHolder(holder, position, payloads); ShareAppInfo appInfo = null; if (mData.size() > position) { appInfo = mData.get(position); } holder.onBindViewHolder(appInfo); } @Override public int getItemCount() { return mData.size() == 0 ? 1 : mData.size(); } } class BaseViewHolder<T extends Object> extends RecyclerView.ViewHolder { public BaseViewHolder(View itemView) { super(itemView); } void onBindViewHolder(T object) { } } class LoadingViewHolder extends BaseViewHolder { LoadingViewHolder(ViewGroup vp) { super(LayoutInflater.from(vp.getContext()).inflate(R.layout.item_loading, vp, false)); } } class EmptyViewHolder extends BaseViewHolder { EmptyViewHolder(ViewGroup vp) { super(LayoutInflater.from(vp.getContext()).inflate(R.layout.item_empty_info, vp, false)); } } class AppInfoViewHolder extends BaseViewHolder<ShareAppInfo> implements CompoundButton.OnCheckedChangeListener { ImageView mIcon; TextView mAppNameTv; SwitchCompat mSwitchCompat; ShareAppInfo appInfo; AppInfoViewHolder(ViewGroup vp) { super(LayoutInflater.from(vp.getContext()).inflate(R.layout.item_app_info, vp, false)); mIcon = (ImageView) itemView.findViewById(R.id.icon); mAppNameTv = (TextView) itemView.findViewById(R.id.app_name); mSwitchCompat = (SwitchCompat) itemView.findViewById(R.id.sc); } void onBindViewHolder(ShareAppInfo appInfo) { this.appInfo = appInfo; mIcon.setImageDrawable(appInfo.applicationInfo.loadIcon(itemView.getContext().getPackageManager())); mAppNameTv.setText(appInfo.appName); mSwitchCompat.setChecked(appInfo.enable); mSwitchCompat.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { this.appInfo.enable = isChecked; } } }