mvp 结合recycleview,简单实现条目点击时间,轮播图bannner的基本操作

来源:互联网 发布:seo需要学什么 编辑:程序博客网 时间:2024/06/09 22:49
public interface ApiService {
    //http://api.expoon.com/AppNews/getNewsList/type/1/p/1  /*  @GET("type/1/p/1")    Observable<News> getHomes();*/    //http://api.svipmovie.com/front/columns/getVideoList.do?catalogId=402834815584e463015584e539330016&pnum=1    @POST    Observable<News> getHomess(@Url String url, @QueryMap Map<String, String> map);}

对应的相关依赖

    compile 'com.squareup.retrofit2:retrofit:2.0.1'    compile 'com.squareup.retrofit2:converter-gson:2.0.1'    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'    compile 'io.reactivex:rxandroid:1.1.0'    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'    compile 'com.google.code.gson:gson:2.8.2'    compile 'com.jcodecraeer:xrecyclerview:1.3.2'    compile 'com.android.support:recyclerview-v7:24.0.0'    compile 'com.jakewharton:butterknife:7.0.1'//静态图片    compile 'com.facebook.fresco:fresco:0.12.0'// 支持 GIF 动图,需要添加    compile 'com.facebook.fresco:animated-gif:0.12.0'    compile 'com.android.support:design:23.4.0'    compile 'com.youth.banner:banner:1.4.9'    compile 'com.github.bumptech.glide:glide:3.7.0'    compile 'com.squareup.okio:okio:1.5.0'    compile(name: 'ijkplayer-java-release', ext: 'aar') /**编译ijkplayer-java-release.aar文件*/

//对应的相关权限

    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />


public class Api {   /* public static final String HOME_URL="http://api.expoon.com/AppNews/getNewsList/";*/    //http://api.svipmovie.com/front/columns/getVideoList.do?catalogId=402834815584e463015584e539330016&pnum=1    public static final String HOME_URL="http://api.svipmovie.com/front/";}


主页面的 代码 必须实现 Ivew层进行视图展示 

public class MainActivity extends AppCompatActivity implements IView {    RecyclerView recycler;    HomeAdaper homeAdaper;    UserPresenter userpresenter;    Banner banner;    ArrayList mlist;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        banner = (Banner)findViewById(R.id.banner);recycler = (RecyclerView)findViewById(R.id.recycler) ;        recycler.setLayoutManager(new LinearLayoutManager(this));        userpresenter = new UserPresenter(this);        userpresenter.getUser(Api.HOME_URL);    }    @Override    public void getNews(List<News.RetBean.ListBean> list) {        recycler.setAdapter(homeAdaper = new HomeAdaper(this,list));        mlist = new ArrayList();        for (int i = 0; i < list.size(); i++) {            mlist.add(list.get(i).getPic());        }        banner.setImageLoader(new GlideImageLoader());        banner.setImages(mlist);        banner.start();        homeAdaper.setOnItemClickLitener(new HomeAdaper.OnItemClickLitener()        {            @Override            public void onItemClick(View view, int position)            {                Toast.makeText(MainActivity.this, position + " click",                        Toast.LENGTH_SHORT).show();                Intent intent = new Intent(MainActivity.this,Main2Activity.class);                startActivity(intent);            }            @Override            public void onItemLongClick(View view, int position)            {                Toast.makeText(MainActivity.this, position + " long click",                        Toast.LENGTH_SHORT).show();            }        });    }}
//下面就是model层 作用是 好说操作 ,网络请求数据

public interface IModel {    void getUrl(String url);}


对应相关实现类 来实现上面定义的接口和重写它的方法

public class UserModel implements IModel {    List<News.RetBean.ListBean> list;    private OnFinish onFinish;    public interface OnFinish{        void OnFinishListener(List<News.RetBean.ListBean> list);    }    public void setOnFinish(OnFinish onFinish){        this.onFinish = onFinish;    }    @Override    public void getUrl(String url) {        list = new ArrayList<>();        HashMap<String,String> map = new HashMap<>();        map.put("catalogId","402834815584e463015584e539330016");        map.put("pnum","1");        Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();        ApiService apiService = retrofit.create(ApiService.class);        Observable<News> homes = apiService.getHomess(url+"columns/getVideoList.do",map);        homes.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer<News>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                        Log.d("mylog", "onNext: "+"失败");                        e.printStackTrace();                    }                    @Override                    public void onNext(News newss) {                        list = newss.getRet().getList();                        onFinish.OnFinishListener(UserModel.this.list);                        Log.d("mylog", "onNext: "+"成功");                    }                });    }}

//下面就是presenter层 来进行  实现它的方法和  用来交互两层 联系 处理业务


public class UserPresenter implements UserModel.OnFinish {    private final IView userView;    private final UserModel userModel;    public UserPresenter(IView userView) {        this.userView = userView;        this.userModel = new UserModel();        userModel.setOnFinish(this);    }    public void getUser(String url){        userModel.getUrl(url);    }    @Override    public void OnFinishListener(List<News.RetBean.ListBean> list) {        userView.getNews(list);    }}

对应的view 它是视图层 用来实现对应页面接收用户进行联系

public interface IView {    void getNews(List<News.RetBean.ListBean> list);}

对应的单立模式 创建一个实列  初始化 注意事项 要在对应的清单文件中

    android:name=".utils.Myapp"


public class Myapp  extends Application{    public static Myapp mInstance;    @Override    public void onCreate() {        super.onCreate();        mInstance = this;        Fresco.initialize(this);    }    public static Myapp getInstance() {        return mInstance;    }}

下面就是就是对应的布局

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.eightgroup.dsxyuelao.MainActivity">    <com.youth.banner.Banner        android:id="@+id/banner"        android:layout_width="wrap_content"        android:layout_height="250dp">    </com.youth.banner.Banner>    <android.support.v7.widget.RecyclerView        android:layout_below="@+id/banner"        android:id="@+id/recycler"        android:layout_width="wrap_content"        android:layout_height="wrap_content">    </android.support.v7.widget.RecyclerView></RelativeLayout>

对应的适配器的子布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="vertical"    xmlns:fresco="http://schemas.android.com/apk/res-auto">    <com.facebook.drawee.view.SimpleDraweeView        android:id="@+id/img"        android:layout_width="100dp"        android:layout_height="100dp"        fresco:placeholderImage="@mipmap/ic_launcher"        fresco:placeholderImageScaleType="focusCrop"        />    <TextView        android:gravity="center"        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

//主要的就是适配器进行的的上下文 有参构造 ,还有 返回参数 和三个方法

public class HomeAdaper extends  RecyclerView.Adapter   {    Context context;    List<News.RetBean.ListBean> list;    public HomeAdaper(Context context, List<News.RetBean.ListBean> list) {        this.context = context;        this.list = list;    }    public interface OnItemClickLitener    {        void onItemClick(View view, int position);        void onItemLongClick(View view , int position);    }    private OnItemClickLitener mOnItemClickLitener;    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)    {        this.mOnItemClickLitener = mOnItemClickLitener;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        MyViewHolder holder1 = new MyViewHolder(LayoutInflater.from(                context).inflate(R.layout.listview, parent,                false));        return holder1;    }    @Override    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {        MyViewHolder holder1 = (MyViewHolder) holder;        holder1.tv.setText(list.get(position).getTitle());        holder1.draweeView1.setImageURI(list.get(position).getPic());        //创建DraweeController        DraweeController controller = Fresco.newDraweeControllerBuilder()                //重试之后要加载的图片URI地址                .setUri(list.get(position).getPic())                //设置点击重试是否开启                .setTapToRetryEnabled(true)                //动画播放                .setAutoPlayAnimations(true)                //设置旧的Controller                .setOldController(holder1.draweeView1.getController())                //构建                .build();        //设置DraweeController        holder1.draweeView1.setController(controller);        if (mOnItemClickLitener != null) {            holder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    int pos = holder.getLayoutPosition();                    mOnItemClickLitener.onItemClick(holder.itemView, pos);                }            });        }    }    @Override    public int getItemCount() {        return list.size();    }    class MyViewHolder extends RecyclerView.ViewHolder {        SimpleDraweeView draweeView1;        TextView tv;        public MyViewHolder(View view) {            super(view);            tv = (TextView) view.findViewById(R.id.tv);            draweeView1 = (SimpleDraweeView) view.findViewById(R.id.img);        }    }}

实现banner轮播图

public class GlideImageLoader extends ImageLoader {    public void displayImage(Context context, Object path, ImageView imageView) {        Glide.with(context).load(path).into(imageView);    }}



阅读全文
0 0