先是请求网络数据的部分
public interface IBannerView {
public void showBData(List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist);
}
public interface IBannerModel {
public void getBData(Observer observer);
}
public class BannerModel implements IBannerModel {
@Override
public void getBData(Observer observer) {
OkHttpClient client=new OkHttpClient.Builder().build();
RetrofitManager.getInstance("http://api.svipmovie.com/front/",client)
.setCreate(BannerUrl.class).getBanner()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(observer);
}
}
public class BannerPresenter {
IBannerView view;
BannerModel model;
List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist=new ArrayList<>();
public BannerPresenter(IBannerView view) {
this.view = view;
model=new BannerModel();
}
public void bpData(){
model.getBData(new Observer<BannerBean>(){
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.i("------","onError()"+e.toString());
}
@Override
public void onNext(BannerBean bannerBean) {
bannerlist.addAll(bannerBean.getRet().getList().get(0).getChildList());
view.showBData(bannerlist);
Log.i("------","onNext()"+bannerlist);
}
});
}
}
适配器中
public class RvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context context;
List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist;
OnItemClickListener listener;
public static final int TYPE_HEADER=0;
public static final int TYPE_ONE=1;
**List<View> listheader=new ArrayList<View>();
public void addheader(View view){
listheader.add(view);
}**
public interface OnItemClickListener{
public void OnItemClick(View view,int position,String id);
}
public void setOnItemClick(OnItemClickListener listener){
this.listener=listener;
}
public RvAdapter(Context context, List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist) {
this.context = context;
this.bannerlist = bannerlist;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType==TYPE_HEADER){
View view1 = View.inflate(context, R.layout.bn_item, null);
return new BnViewHolder(view1);
}else {
View view2 = View.inflate(context, R.layout.rv_item, null);
return new RvViewHolder(view2);
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
//给banner赋值
if(holder instanceof BnViewHolder){
ArrayList<String> pic=new ArrayList<>();
for(int i=0;i<bannerlist.size();i++){
pic.add(bannerlist.get(i).getPic());
}
((BnViewHolder)holder).banner.setImages(pic);
((BnViewHolder)holder).banner.setImageLoader(new BnImageLoader());
((BnViewHolder)holder).banner.start();
}
if(holder instanceof RvViewHolder){
((RvViewHolder)holder).sdv_rv.setImageURI(bannerlist.get(position).getPic());
((RvViewHolder)holder).tv_rv.setText(bannerlist.get(position).getTitle());
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener!=null){
listener.OnItemClick(view,position,bannerlist.get(position).getDataId());
}
}
});
}
@Override
public int getItemCount() {
return bannerlist!=null?bannerlist.size():0;
}
@Override
public int getItemViewType(int position) {
if(position < listheader.size()){
return TYPE_HEADER;
}else {
return TYPE_ONE;
}
}
class RvViewHolder extends RecyclerView.ViewHolder{
SimpleDraweeView sdv_rv;
TextView tv_rv;
public RvViewHolder(View itemView) {
super(itemView);
sdv_rv=itemView.findViewById(R.id.sdv_rv);
tv_rv=itemView.findViewById(R.id.tv_rv);
}
}
//banner的ViewHolder
class BnViewHolder extends RecyclerView.ViewHolder{
Banner banner;
public BnViewHolder(View itemView) {
super(itemView);
banner=itemView.findViewById(R.id.banner);
}
}
}
Activity中
public class MainActivity extends AppCompatActivity implements IBannerView {
RvAdapter rvAdapter;
private RecyclerView mRv;
BannerPresenter bannerPresenter;
List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
bannerPresenter=new BannerPresenter(this);
showBData(bannerlist);
bannerPresenter.bpData();
}
@Override
public void showBData(List<BannerBean.RetBean.ListBean.ChildListBean> bannerlist) {
LinearLayoutManager manager=new LinearLayoutManager(this);
mRv.setLayoutManager(manager);
rvAdapter=new RvAdapter(this,bannerlist);
mRv.setAdapter(rvAdapter);
**Banner banner=new Banner(this);
rvAdapter.addheader(banner);**
rvAdapter.setOnItemClick(new RvAdapter.OnItemClickListener() {
@Override
public void OnItemClick(View view, int position, String id) {
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
intent.putExtra("id",id);![这里写图片描述](https://img-blog.csdn.net/20171220193100505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwMzk3MjM4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
startActivity(intent);
}
});
}
private void initView() {
mRv = (RecyclerView) findViewById(R.id.rv);
}
}
下面就是一些工具类了
public interface BannerUrl {
@GET("homePageApi/homePage.do")
Observable<BannerBean> getBanner();
}
//Retrofit二次封装
public class RetrofitManager {
private Retrofit mRetrofit;
private String baseUrl;
OkHttpClient client;//有关拦截器
private static RetrofitManager mRetrofitManager;
private RetrofitManager(){}
private RetrofitManager(String baseUrl, OkHttpClient client){
this.baseUrl=baseUrl;
this.client=client;//有关拦截器
initRetrofit();
}
public static synchronized RetrofitManager getInstance(String baseUrl, OkHttpClient client){//有关拦截器
if (mRetrofitManager == null){
mRetrofitManager = new RetrofitManager(baseUrl,client);
}
return mRetrofitManager;
}
private void initRetrofit() {
mRetrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)//有关拦截器
.build();
}
public <T> T setCreate(Class<T> reqServer){
return mRetrofit.create(reqServer);
}
布局
主布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
tools:context="com.example.lastexam.MainActivity">
<!--<com.youth.banner.Banner-->
<!--android:id="@+id/banner"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="200dp"></com.youth.banner.Banner>-->
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
></android.support.v7.widget.RecyclerView>
<EditText
android:id="@+id/ss"
android:layout_width="350dp"
android:background="@drawable/yuanjiao"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:hint="一念天堂"
android:textColor="@android:color/white"
/>
</RelativeLayout>
banner的
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="200dp"></com.youth.banner.Banner>
</LinearLayout>
下面的recyclerview的
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.facebook.drawee.view.SimpleDraweeView
android:layout_marginTop="10dp"
android:id="@+id/sdv_rv"
android:layout_width="600dp"
android:layout_height="200dp" />
<TextView
android:id="@+id/tv_rv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="111111"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
/>
</LinearLayout>
依赖
compile 'com.youth.banner:banner:1.4.9'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
//若和观察者结合的话,需加上如下依赖:
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.dou361.ijkplayer:jjdxm-ijkplayer:1.0.5'