万能适配器
public abstract class BaseRvAdapter < T > extends RecyclerView. Adapter < BaseRvAdapter. BaseViewHolder> {
public List< T > dataList = new ArrayList < > ( ) ;
private IRecyclerItemClickListener iRecyclerItemClickListener;
protected void setDataList ( List< T > list) {
dataList= list;
}
@NonNull
@Override
public BaseViewHolder onCreateViewHolder ( @NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater. from ( parent. getContext ( ) ) . inflate ( getLayoutId ( viewType) , parent, false ) ;
return new BaseViewHolder ( inflate) ;
}
public abstract int getLayoutId ( int viewType) ;
@Override
public void onBindViewHolder ( @NonNull BaseViewHolder holder, int position) {
displayViewHolder ( holder, position, dataList. get ( position) ) ;
holder. itemView. setOnClickListener ( new View. OnClickListener ( ) {
@Override
public void onClick ( View view) {
if ( iRecyclerItemClickListener != null ) {
iRecyclerItemClickListener. onItemClick ( position) ;
}
}
} ) ;
holder. itemView. setOnLongClickListener ( new View. OnLongClickListener ( ) {
@Override
public boolean onLongClick ( View view) {
if ( iRecyclerItemClickListener != null ) {
iRecyclerItemClickListener. onItwmLongClick ( position) ;
}
return true ;
}
} ) ;
}
public abstract void displayViewHolder ( BaseViewHolder holder, int position, T itemData) ;
public void setiRecyclerItemClickListener ( IRecyclerItemClickListener listener) {
iRecyclerItemClickListener = listener;
}
@Override
public int getItemCount ( ) {
return dataList. size ( ) ;
}
public abstract int getRootViewType ( int position) ;
@Override
public int getItemViewType ( int position) {
return getRootViewType ( position) ;
}
public static class BaseViewHolder extends RecyclerView. ViewHolder {
SparseArray< View> sparseArray = new SparseArray < > ( ) ;
public BaseViewHolder ( @NonNull View itemView) {
super ( itemView) ;
}
public < V extends View > V getView ( int id) {
if ( sparseArray. get ( id) != null ) {
return ( V ) sparseArray. get ( id) ;
} else {
V viewById = itemView. findViewById ( id) ;
sparseArray. put ( id, viewById) ;
return viewById;
}
}
}
public interface IRecyclerItemClickListener {
void onItemClick ( int position) ;
void onItwmLongClick ( int position) ;
}
}
继承自万能适配器
package com. example. shoppingmallsix. adapter;
import android. content. Context;
import android. content. Intent;
import android. os. Handler;
import android. os. Message;
import android. util. Log;
import android. widget. ImageView;
import android. widget. TextView;
import androidx. recyclerview. widget. GridLayoutManager;
import androidx. recyclerview. widget. LinearLayoutManager;
import androidx. recyclerview. widget. RecyclerView;
import androidx. recyclerview. widget. StaggeredGridLayoutManager;
import androidx. viewpager. widget. ViewPager;
import com. example. framework. BaseRvAdapter;
import com. example. framework. manager. ShopmallGlide;
import com. example. net. bean. HomeBean;
import com. example. net. constants. Constants;
import com. example. shoppingmallsix. BuildConfig;
import com. example. shoppingmallsix. R ;
import com. example. shoppingmallsix. goods. GoodsActivity;
import com. youth. banner. Banner;
import com. youth. banner. loader. ImageLoader;
import java. util. ArrayList;
import java. util. List;
import java. util. Timer;
import java. util. TimerTask;
public class HomeAdapter extends BaseRvAdapter < Object> {
private final int BANNER_TYPE = 0 ;
private final int CHANNEL_TYPE = 1 ;
private final int ACT_TYPE = 2 ;
private final int HOT_TYPE = 3 ;
private final int RECOMMEND_TYPE = 4 ;
private final int HOTT_TYPE = 5 ;
private Context context;
public HomeAdapter ( List< Object> list, Context context) {
setDataList ( list) ;
this . context = context;
}
@Override
public int getLayoutId ( int viewType) {
int layoutId = - 1 ;
switch ( viewType) {
case BANNER_TYPE :
layoutId = R . layout. home_banner;
break ;
case CHANNEL_TYPE :
layoutId = R . layout. home_recommend;
break ;
case ACT_TYPE :
layoutId = R . layout. home_viewpage;
break ;
case HOT_TYPE :
layoutId = R . layout. home_seckill;
break ;
case RECOMMEND_TYPE :
layoutId = R . layout. home_recommend1;
break ;
case HOTT_TYPE :
layoutId = R . layout. home_hot;
break ;
}
return layoutId;
}
@Override
public void displayViewHolder ( BaseViewHolder holder, int position, Object itemData) {
switch ( position) {
case 0 :
List< HomeBean. ResultBean. BannerInfoBean> bannerInfoBeans = ( List< HomeBean. ResultBean. BannerInfoBean> ) itemData;
if ( BuildConfig. DEBUG )
Log. d ( "HomeAdapter" , "bannerInfoBeans:" + bannerInfoBeans. toString ( ) ) ;
Banner banner = holder. getView ( R . id. banner) ;
banner. setImages ( bannerInfoBeans) ;
banner. setImageLoader ( new ImageLoader ( ) {
@Override
public void displayImage ( Context context, Object path, ImageView imageView) {
HomeBean. ResultBean. BannerInfoBean bean = ( HomeBean. ResultBean. BannerInfoBean) path;
String image = bean. getImage ( ) ;
ShopmallGlide. with ( holder. itemView. getContext ( ) )
. load ( Constants. BASE_URl_IMAGE + image)
. into ( imageView) ;
}
} ) ;
banner. start ( ) ;
break ;
case 1 :
List< HomeBean. ResultBean. ChannelInfoBean> channelInfoBeans = ( List< HomeBean. ResultBean. ChannelInfoBean> ) itemData;
RecyclerView recyclerView = holder. getView ( R . id. recommendRv) ;
recyclerView. setLayoutManager ( new StaggeredGridLayoutManager ( 5 , StaggeredGridLayoutManager. VERTICAL ) ) ;
ChanneAdapter channeAdapter = new ChanneAdapter ( ) ;
recyclerView. setAdapter ( channeAdapter) ;
channeAdapter. dataList. addAll ( channelInfoBeans) ;
channeAdapter. setiRecyclerItemClickListener ( new IRecyclerItemClickListener ( ) {
@Override
public void onItemClick ( int position) {
}
@Override
public void onItwmLongClick ( int position) {
}
} ) ;
break ;
case 2 :
List< HomeBean. ResultBean. ActInfoBean> actInfoBeans = ( List< HomeBean. ResultBean. ActInfoBean> ) itemData;
ViewPager vp = holder. getView ( R . id. vp) ;
ArrayList< ImageView> imageViews = new ArrayList < > ( ) ;
for ( HomeBean. ResultBean. ActInfoBean actInfoBean : actInfoBeans) {
ImageView imageView = new ImageView ( holder. itemView. getContext ( ) ) ;
ShopmallGlide. with ( holder. itemView. getContext ( ) ) . load ( Constants. BASE_URl_IMAGE + actInfoBean. getIcon_url ( ) )
. into ( imageView) ;
imageViews. add ( imageView) ;
}
ActAdapter actAdapter = new ActAdapter ( imageViews) ;
vp. setAdapter ( actAdapter) ;
break ;
case 3 :
List< HomeBean. ResultBean. SeckillInfoBean. ListBean> seckillInfoBeans = ( List< HomeBean. ResultBean. SeckillInfoBean. ListBean> ) itemData;
RecyclerView seckillRecyclerView = holder. getView ( R . id. fourRv) ;
LinearLayoutManager linearLayoutManager = new LinearLayoutManager ( context) ;
linearLayoutManager. setOrientation ( RecyclerView. HORIZONTAL ) ;
seckillRecyclerView. setLayoutManager ( linearLayoutManager) ;
SeckillAdapter seckillAdapter = new SeckillAdapter ( ) ;
seckillRecyclerView. setAdapter ( seckillAdapter) ;
seckillAdapter. dataList. addAll ( seckillInfoBeans) ;
hours = holder. getView ( R . id. hours_tv) ;
minutes = holder. getView ( R . id. minutes_tv) ;
seconds = holder. getView ( R . id. seconds_tv) ;
startRun ( ) ;
seckillAdapter. setiRecyclerItemClickListener ( new IRecyclerItemClickListener ( ) {
@Override
public void onItemClick ( int position) {
Intent intent = new Intent ( holder. itemView. getContext ( ) , GoodsActivity. class ) ;
intent. putExtra ( "id" , seckillInfoBeans. get ( position) . getProduct_id ( ) ) ;
intent. putExtra ( "name" , seckillInfoBeans. get ( position) . getName ( ) ) ;
intent. putExtra ( "figure" , seckillInfoBeans. get ( position) . getFigure ( ) ) ;
intent. putExtra ( "price" , seckillInfoBeans. get ( position) . getCover_price ( ) ) ;
holder. itemView. getContext ( ) . startActivity ( intent) ;
}
@Override
public void onItwmLongClick ( int position) {
}
} ) ;
break ;
case 4 :
List< HomeBean. ResultBean. RecommendInfoBean> recommendInfoBeans = ( List< HomeBean. ResultBean. RecommendInfoBean> ) itemData;
RecyclerView recommendRecyclerView = holder. getView ( R . id. recommendRv) ;
recommendRecyclerView. setLayoutManager ( new GridLayoutManager ( context, 3 ) ) ;
RecommendAdapter recommendAdapter = new RecommendAdapter ( ) ;
recommendRecyclerView. setAdapter ( recommendAdapter) ;
recommendAdapter. dataList. addAll ( recommendInfoBeans) ;
recommendAdapter. setiRecyclerItemClickListener ( new IRecyclerItemClickListener ( ) {
@Override
public void onItemClick ( int position) {
Intent intent = new Intent ( holder. itemView. getContext ( ) , GoodsActivity. class ) ;
intent. putExtra ( "id" , recommendInfoBeans. get ( position) . getProduct_id ( ) ) ;
intent. putExtra ( "name" , recommendInfoBeans. get ( position) . getName ( ) ) ;
intent. putExtra ( "figure" , recommendInfoBeans. get ( position) . getFigure ( ) ) ;
intent. putExtra ( "price" , recommendInfoBeans. get ( position) . getCover_price ( ) ) ;
holder. itemView. getContext ( ) . startActivity ( intent) ;
}
@Override
public void onItwmLongClick ( int position) {
}
} ) ;
break ;
case 5 :
List< HomeBean. ResultBean. HotInfoBean> hotInfoBeans = ( List< HomeBean. ResultBean. HotInfoBean> ) itemData;
RecyclerView hotRecyclerView = holder. getView ( R . id. hotRv) ;
hotRecyclerView. setLayoutManager ( new StaggeredGridLayoutManager ( 2 , StaggeredGridLayoutManager. VERTICAL ) ) ;
HotAdapter hotAdapter = new HotAdapter ( ) ;
hotRecyclerView. setAdapter ( hotAdapter) ;
hotAdapter. dataList. addAll ( hotInfoBeans) ;
hotAdapter. setiRecyclerItemClickListener ( new IRecyclerItemClickListener ( ) {
@Override
public void onItemClick ( int position) {
Intent intent = new Intent ( holder. itemView. getContext ( ) , GoodsActivity. class ) ;
intent. putExtra ( "id" , hotInfoBeans. get ( position) . getProduct_id ( ) ) ;
intent. putExtra ( "name" , hotInfoBeans. get ( position) . getName ( ) ) ;
intent. putExtra ( "figure" , hotInfoBeans. get ( position) . getFigure ( ) ) ;
intent. putExtra ( "price" , hotInfoBeans. get ( position) . getCover_price ( ) ) ;
holder. itemView. getContext ( ) . startActivity ( intent) ;
}
@Override
public void onItwmLongClick ( int position) {
}
} ) ;
break ;
}
}
private long mHour = 23 ;
private long mMin = 59 ;
private long mSecond = 59 ;
private TextView hours;
private TextView minutes;
private TextView seconds;
private Timer timer = new Timer ( ) ;
Handler timeHandler = new Handler ( ) {
@Override
public void handleMessage ( Message msg) {
super . handleMessage ( msg) ;
if ( msg. what == 1 ) {
computeTime ( ) ;
hours. setText ( getTv ( mHour) ) ;
minutes. setText ( getTv ( mMin) ) ;
seconds. setText ( getTv ( mSecond) ) ;
if ( mSecond == 0 && mHour == 0 && mMin == 0 ) {
timer. cancel ( ) ;
}
}
}
} ;
private void computeTime ( ) {
mSecond-- ;
if ( mSecond < 0 ) {
mMin-- ;
mSecond = 59 ;
if ( mMin < 0 ) {
mMin = 59 ;
mHour-- ;
if ( mHour < 0 ) {
mHour = 0 ;
mMin = 0 ;
mSecond = 0 ;
}
}
}
}
private void startRun ( ) {
TimerTask mTimerTask = new TimerTask ( ) {
@Override
public void run ( ) {
Message message = Message. obtain ( ) ;
message. what = 1 ;
timeHandler. sendMessage ( message) ;
}
} ;
timer. schedule ( mTimerTask, 0 , 1000 ) ;
}
private String getTv ( long l) {
if ( l >= 10 ) {
return l + "" ;
} else {
return "0" + l;
}
}
@Override
public int getRootViewType ( int position) {
int type = - 1 ;
switch ( position) {
case 0 :
type = BANNER_TYPE ;
break ;
case 1 :
type = CHANNEL_TYPE ;
break ;
case 2 :
type = ACT_TYPE ;
break ;
case 3 :
type = HOT_TYPE ;
break ;
case 4 :
type = RECOMMEND_TYPE ;
break ;
case 5 :
type = HOTT_TYPE ;
break ;
}
return type;
}
}
页面显示
package com. example. shoppingmallsix. fragment. home;
import android. content. Intent;
import android. util. Log;
import android. view. View;
import android. widget. EditText;
import android. widget. LinearLayout;
import android. widget. TextView;
import androidx. fragment. app. Fragment;
import androidx. recyclerview. widget. LinearLayoutManager;
import androidx. recyclerview. widget. RecyclerView;
import com. example. framework. BaseFragment;
import com. example. framework. manager. LogUtil;
import com. example. framework. manager. MessageManager;
import com. example. framework. view. ToolBar;
import com. example. net. bean. HomeBean;
import com. example. shoppingmallsix. BuildConfig;
import com. example. shoppingmallsix. R ;
import com. example. shoppingmallsix. adapter. HomeAdapter;
import com. example. shoppingmallsix. message. MessageActivity;
import com. umeng. message. PushAgent;
import org. greenrobot. eventbus. EventBus;
import org. greenrobot. eventbus. Subscribe;
import org. greenrobot. eventbus. ThreadMode;
import java. util. ArrayList;
import java. util. List;
public class HomeFragment extends BaseFragment < HomePresenter> implements IHomeView , MessageManager. IMessage {
private ToolBar toolbar;
private EditText edtname;
private RecyclerView rv;
private HomeAdapter homeAdapter;
private HomePresenter homePresenter;
private List< Object> list = new ArrayList < > ( ) ;
private LinearLayout homeMessage;
private TextView messageTv;
public HomeFragment ( ) {
}
@Override
protected void initPresenter ( ) {
homePresenter = new HomePresenter ( this ) ;
}
@Override
protected void initData ( ) {
MessageManager. getInstance ( ) . register ( this : : onMessage) ;
homePresenter. getHomeDData ( ) ;
}
@Override
protected void initView ( ) {
toolbar = ( ToolBar) mBaseView. findViewById ( R . id. toolbar) ;
edtname = ( EditText) mBaseView. findViewById ( R . id. edtname) ;
rv = ( RecyclerView) mBaseView. findViewById ( R . id. rv) ;
homeMessage = mBaseView. findViewById ( R . id. homeMessage) ;
messageTv = mBaseView. findViewById ( R . id. messageTv) ;
PushAgent. getInstance ( getContext ( ) ) . onAppStart ( ) ;
homeAdapter = new HomeAdapter ( list, getActivity ( ) ) ;
rv. setLayoutManager ( new LinearLayoutManager ( getContext ( ) ) ) ;
rv. setAdapter ( homeAdapter) ;
homeMessage. setOnClickListener ( new View. OnClickListener ( ) {
@Override
public void onClick ( View view) {
Intent intent = new Intent ( getActivity ( ) , MessageActivity. class ) ;
startActivity ( intent) ;
}
} ) ;
}
@Override
protected int getLayoutId ( ) {
return R . layout. fragment_home;
}
@Override
public void getHomeData ( HomeBean homeBean) {
HomeBean. ResultBean result = homeBean. getResult ( ) ;
int count = MessageManager. getInstance ( ) . getCount ( ) ;
setCount ( count) ;
if ( BuildConfig. DEBUG ) Log. d ( "HomeFragment" , "homeBean:" + homeBean) ;
list. add ( result. getBanner_info ( ) ) ;
list. add ( result. getChannel_info ( ) ) ;
list. add ( result. getAct_info ( ) ) ;
list. add ( result. getSeckill_info ( ) . getList ( ) ) ;
list. add ( result. getRecommend_info ( ) ) ;
list. add ( result. getHot_info ( ) ) ;
loadingPage. showSuccessView ( ) ;
homeAdapter. notifyDataSetChanged ( ) ;
}
@Override
public void showLoading ( ) {
loadingPage. showTransparentLoadingView ( ) ;
}
@Override
public void hideLoading ( ) {
}
@Override
public void showToast ( String msg) {
loadingPage. showError ( msg) ;
}
@Override
public void onMessage ( int count) {
setCount ( count) ;
}
public void setCount ( int count) {
if ( count<= 0 ) {
messageTv. setText ( "消息" ) ;
} else {
messageTv. setText ( count+ "" ) ;
}
}
}
Presenter类
package com. example. shoppingmallsix. fragment. home;
import com. example. framework. BasePresenter;
import com. example. net. RetrofitCreator;
import com. example. net. bean. HomeBean;
import java. util. concurrent. TimeUnit;
import io. reactivex. Observer;
import io. reactivex. android. schedulers. AndroidSchedulers;
import io. reactivex. disposables. Disposable;
import io. reactivex. functions. Action;
import io. reactivex. functions. Consumer;
import io. reactivex. schedulers. Schedulers;
public class HomePresenter extends BasePresenter < IHomeView> {
public HomePresenter ( IHomeView iHomeView) {
attachView ( iHomeView) ;
}
public void getHomeDData ( ) {
RetrofitCreator. getFiannceApiService ( ) . getHoemData ( )
. delay ( 2 , TimeUnit. SECONDS )
. subscribeOn ( Schedulers. io ( ) )
. observeOn ( AndroidSchedulers. mainThread ( ) )
. doOnSubscribe ( new Consumer < Disposable> ( ) {
@Override
public void accept ( Disposable disposable) throws Exception {
add ( disposable) ;
iView. showLoading ( ) ;
}
} )
. doFinally ( new Action ( ) {
@Override
public void run ( ) throws Exception {
iView. hideLoading ( ) ;
}
} )
. subscribe ( new Observer < HomeBean> ( ) {
@Override
public void onSubscribe ( Disposable d) {
}
@Override
public void onNext ( HomeBean homeBean) {
if ( iView != null ) {
iView. getHomeData ( homeBean) ;
}
}
@Override
public void onError ( Throwable e) {
if ( iView != null ) {
iView. showToast ( e. getMessage ( ) ) ;
}
}
@Override
public void onComplete ( ) {
}
} ) ;
}
}
View类
public interface IHomeView extends IBaseView {
void getHomeData ( HomeBean homeBean) ;
}