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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值