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/";}
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
- mvp 结合recycleview,简单实现条目点击时间,轮播图bannner的基本操作
- RecycleView条目点击事件的实现方法
- RecycleView条目点击事件的实现 接口回调
- recycleview条目点击事件
- recycleview实现title横向滑动,点击条目居中显示
- MVP结合RecycleView,利用retrofit与RxJava简单请求数据
- RecycleView实现多条目
- RecycleView的简单实现
- RecycleView的多条目
- mvp的基本登录(简单实现)
- RecycleView的基本配置和使用方法(四)---RecycleView实现简单demo
- 炫酷轮播图的实现——Bannner
- recycleview 点击条目事件 +拦截器
- 如何用viewpager写一个简单易用的安卓Bannner实现轮播
- recycleview条目的背景选择器
- recycleView的条目长按换位置
- RecycleView 的多条目布局
- recycleview的多条目加载
- Failed to introspect annotated ** org.springframework.boot.web.support.SpringBootServletInitializer
- nginx强制使用https访问(http跳转到https) mark
- 一级 二级列表
- 一分钟学会 ConstraintLayout 之从属性角度理解布局
- python基础:类、私有变量、类变量
- mvp 结合recycleview,简单实现条目点击时间,轮播图bannner的基本操作
- Modbus学习笔记
- SpringBoot在自定义类中注入Service为null
- linux&windows utf8和gbk编码识别&互相转换
- greenDAO 3.0 简介
- ASP.NET基于Aspose.Words插入Word水印以及多个水印
- wing如何改变编码
- 重复依赖多个版本的库,java.util.zip.ZipException: duplicate entryd的解决方式
- 第十一周项目二C/C++操作用邻接表存储的图