布局
xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000"> <com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/refreshLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/fra01_rela" > <com.youth.banner.Banner android:id="@+id/ban" android:layout_width="match_parent" android:layout_height="200dp" > com.youth.banner.Banner> <include layout="@layout/item_title" /> RelativeLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="205dp" android:text="精彩推荐"/> <android.support.v7.widget.RecyclerView android:layout_below="@+id/fra01_rela" android:layout_alignParentBottom="true" android:id="@+id/recyclerview" android:layout_marginTop="30dp" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never" /> RelativeLayout> ScrollView> com.scwang.smartrefresh.layout.SmartRefreshLayout> RelativeLayout>
activity
package com.example.com.fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.example.com.activity.SousuoActivity; import com.example.com.adapter.Fra1RecAdapter; import com.example.com.bean.MessageBean; import com.example.com.camera.R; import com.example.com.activity.XiangqingActivity; import com.example.com.presenter.MyDataPresenter; import com.example.com.view.DataView; import com.scwang.smartrefresh.header.MaterialHeader; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.constant.SpinnerStyle; import com.scwang.smartrefresh.layout.footer.BallPulseFooter; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import com.youth.banner.Banner; import com.youth.banner.listener.OnBannerListener; import com.youth.banner.loader.ImageLoader; import com.youth.banner.transformer.AccordionTransformer; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.List; /** * Created by linmeihui on 2018/5/15. */ public class ChoicenessFra extends Fragment implements DataView,Fra1RecAdapter.onItemClick{ private RecyclerView recyclerview; private Banner ban; private SmartRefreshLayout refreshLayout; private MyDataPresenter myDataPresenter; private List list; private Fra1RecAdapter myRecAdapter; private List listImg = new ArrayList<>(); private List childList; private TextView title; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v=inflater.inflate(R.layout.fra01,container,false); refreshLayout = v.findViewById(R.id.refreshLayout); ban = v.findViewById(R.id.ban); recyclerview = v.findViewById(R.id.recyclerview); title = v.findViewById(R.id.title); init(); title.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), SousuoActivity.class); startActivity(intent); } }); return v; } private void init() { myDataPresenter = new MyDataPresenter(this); toData(); //设置 Header 为 Material风格 MaterialHeader refreshLayout.setRefreshHeader(new MaterialHeader(getActivity()).setShowBezierWave(false)); //设置 Footer 为 球脉冲 refreshLayout.setRefreshFooter(new BallPulseFooter(getActivity()).setSpinnerStyle(SpinnerStyle.Scale)); //刷新 refreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { refreshLayout.finishLoadMore(2000); refreshLayout.finishRefresh(); } }); //加载 refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(RefreshLayout refreshlayout) { refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败 refreshlayout.finishLoadMore(); } }); //设置布局管理器 recyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerview.setNestedScrollingEnabled(false); } @Override public void itemClick(int position) { Log.d("--", "itemClick: "); String dataId = childList.get(position).getDataId(); Intent intent = new Intent(getActivity(), XiangqingActivity.class); intent.putExtra("data",dataId); startActivity(intent); } //展示图片的类 public class ImgApp extends ImageLoader{ @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(getActivity()).load(path).into(imageView); } } //请求数据方法 private void toData() { myDataPresenter.getDataUrl(); } //回调成功方法 @Override public void onSuccess(MessageBean messageBean) { list = messageBean.getRet().getList(); for (int i = 0; i <list.size() ; i++) { if (list.get(i).getChildList().get(0).getPic().equals("")||list.get(i).getTitle().equals("")){ list.remove(i); } } EventBus.getDefault().post(list); Log.d("--", "onSuccess: "+list); //获取图片 getPic(); childList = list.get(4).getChildList(); getAdapter(childList); EventBus.getDefault().postSticky(list); } //获取图片数据 private void getPic() { final List childList = list.get(0).getChildList(); for (int i = 0; i < childList.size() ; i++) { listImg.add(childList.get(i).getPic()); } //引用ImgApp,加载里面的东西 ban.setImages(listImg) .setImageLoader(new ImgApp()) .setBannerAnimation(AccordionTransformer.class) .isAutoPlay(true) .setDelayTime(2000) .start(); ban.setOnBannerListener(new OnBannerListener() { @Override public void OnBannerClick(int position) { String shareURL = childList.get(position).getShareURL(); //Toast.makeText(getActivity(),shareURL,Toast.LENGTH_SHORT).show(); } }); } //设置recycleview适配器 private void getAdapter(List childList) { myRecAdapter = new Fra1RecAdapter(getActivity(), childList); recyclerview.setAdapter(myRecAdapter); myRecAdapter.setClick(this); } //回调失败方法 @Override public void onError(String message) { Toast.makeText(getActivity(),message,Toast.LENGTH_SHORT).show(); } }
dataview
package com.example.com.view; import com.example.com.bean.MessageBean; /** * Created by linmeihui on 2018/5/16. */ public interface DataView<T> { void onSuccess(MessageBean messageBean); void onError(String message); }
adapter
package com.example.com.adapter; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.com.bean.MessageBean; import com.example.com.camera.R; import java.util.List; /** * Created by linmeihui on 2018/5/17. */ public class Fra1RecAdapter extends RecyclerView.Adapter{ Context context; List childList; onItemClick click; public Fra1RecAdapter(Context context, List childList) { this.context=context; this.childList=childList; } public void setClick(onItemClick click){ this.click=click; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { // View view = View.inflate(context,R.layout.recy_item,null); View view = LayoutInflater.from(context).inflate(R.layout.fra1_recy_item, parent,false); ViewHolder viewHolder=new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { ViewHolder viewHolder= (ViewHolder) holder; viewHolder.tv.setText(childList.get(position).getTitle()); Glide.with(context).load(childList.get(position).getPic()).into(viewHolder.img); viewHolder.img.setScaleType(ImageView.ScaleType.FIT_XY); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { click.itemClick(position); } }); } @Override public int getItemCount() { return childList.size(); } class ViewHolder extends RecyclerView.ViewHolder{ private final ImageView img; private final TextView tv; public ViewHolder(View itemView) { super(itemView); tv = itemView.findViewById(R.id.tv); img = itemView.findViewById(R.id.img); } } public interface onItemClick{ void itemClick(int position); } }
adapter子布局
xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="center" android:id="@+id/img"/> <TextView android:layout_below="@id/img" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="" android:layout_margin="5dp" android:id="@+id/tv"/> RelativeLayout>
mydatapresenter
package com.example.com.presenter; import com.example.com.bean.MessageBean; import com.example.com.model.MyDataModel; import com.example.com.view.DataView; import io.reactivex.Flowable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import io.reactivex.subscribers.DefaultSubscriber; /** * Created by linmeihui on 2018/5/16. */ public class MyDataPresenter implements DataPresenter{ DataView dataView; private final MyDataModel myDataModel; public MyDataPresenter(DataView dataView){ this.dataView=dataView; myDataModel = new MyDataModel(); } @Override public void success(Flowable t) { t.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new DefaultSubscriber () { @Override public void onNext(MessageBean messageBean) { dataView.onSuccess(messageBean); } @Override public void onError(Throwable t) { dataView.onError(t.getMessage()); } @Override public void onComplete() { } }); } public void setDataView(){ if(dataView != null){ dataView = null; } } public void getDataUrl(){ myDataModel.toData(this); } }
datapresenter
package com.example.com.presenter; import com.example.com.bean.MessageBean; import io.reactivex.Flowable; /** * Created by linmeihui on 2018/5/16. */ public interface DataPresenter<T> { void success(Flowable<T> t); }