Android XRecyclerView实现多条目加载
作者:飞鸟96 发布时间:2021-10-15 07:32:21
标签:Android,XRecyclerView,加载
本文实例为大家分享了Android实现多条目加载展示的具体代码,供大家参考,具体内容如下
展示效果
依赖
testCompile 'junit:junit:4.12'
compile 'com.hjm:BottomTabBar:1.1.1'
compile 'com.android.support:design:23.4.0'
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
compile 'com.squareup.okio:okio:1.5.0'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile files('libs/gson-2.3.1.jar')
compile files('libs/universal-image-loader-1.9.3.jar')
compile 'com.youth.banner:banner:1.4.9'
compile 'com.github.bumptech.glide:glide:3.7.0'
添加配置
<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="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
代码区
ZhuyeActivity(首页布局含TabLayout)
public class ZhuyeActivity extends AppCompatActivity {
private ViewPager viewpager;
private TabLayout tablayout;
private FragmentAdapter adapter;
private List<Fragment> fragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhuye);
viewpager=(ViewPager)findViewById(R.id.viewpager);
tablayout=(TabLayout)findViewById(R.id.tablayout);
fragments=new ArrayList<Fragment>();
OneFragment oneFragment = new OneFragment();
TwoFragment twoFragment = new TwoFragment();
ThreeFragment threeFragment = new ThreeFragment();
FourFragment fourFragment = new FourFragment();
fragments.add(oneFragment);
fragments.add(twoFragment);
fragments.add(threeFragment);
fragments.add(fourFragment);
adapter = new FragmentAdapter(getSupportFragmentManager(),fragments);
viewpager.setAdapter(adapter);
tablayout.setupWithViewPager(viewpager);
}
}
activity_zhuye(首页布局xml文件)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_zhuye"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="test.bwie.com.ykmn.ZhuyeActivity">
<RelativeLayout
android:id="@+id/app_top"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorPrimaryDark"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="首页"
android:textSize="25dp"
android:textColor="@color/colorBai"
android:layout_centerInParent="true"
/>
</RelativeLayout>
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/tablayout"
android:layout_below="@id/app_top"
>
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpager"
android:layout_below="@id/tablayout"
/>
</RelativeLayout>
OneFragment(首页以第一个fragment 里面的API是自行供应的接口)
public class OneFragment extends Fragment {
private XRecyclerView xr;
private List<String> list = new ArrayList<>();
//获取数据的开始
private int curr;
private XRAdapter adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.y1, null, false);
//初始化xr控件
xr=(XRecyclerView)view.findViewById(R.id.xre_xrv);
//加布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
xr.setLayoutManager(layoutManager);
getData(API.TYPE_HOME,1);
xr.setLoadingListener(new XRecyclerView.LoadingListener() {
/*下拉刷新*/
@Override
public void onRefresh() {
curr=0;
list.clear();
getData(API.TYPE_HOME,curr);
xr.refreshComplete();
}
/*上拉加载*/
@Override
public void onLoadMore() {
/*curr++;
getData(API.TYPE_HOME,curr);
xr.refreshComplete();*/
// xr.loadMoreComplete();
}
});
return view;
}
private void getData(String url,int curr){
OkHttp3Utils.getInstance().doGet(url, new GsonObjectCallback<MyGsonFr>() {
@Override
public void onUi(MyGsonFr myGsonFr) {
XRAdapter mxradapter=new XRAdapter(getActivity(),myGsonFr.getTop_stories());
xr.setAdapter(mxradapter);
}
@Override
public void onFailed(Call call, IOException e) {
}
});
}
}
y1(OneFragment的布局代码xml)
<?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="match_parent"
>
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/xre_xrv"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</com.jcodecraeer.xrecyclerview.XRecyclerView>
</RelativeLayout>
XRAdapter(适配器对条目)
public class XRAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<MyGsonFr.TopStoriesBean> lists;
Context mcontext;
ArrayList mlist;
private enum Item_Type{
Typeone,Typetwo,Typethree,Typefour,Typefive,Typesix,Typeseven;
}
//创建适配器有参构造
public XRAdapter(Context mcontext, List<MyGsonFr.TopStoriesBean> data) {
this.lists = data;
this.mcontext = mcontext;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType==Item_Type.Typeone.ordinal()){
View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_a, null);
ViewHolderA viewHolder = new ViewHolderA(mView);
return viewHolder;
}else if(viewType==Item_Type.Typetwo.ordinal()){
View mView = LayoutInflater.from(mcontext).inflate(R.layout.recycle_item_b, null);
ViewHolderB viewHolder = new ViewHolderB(mView);
return viewHolder;
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolderA){
mlist=new ArrayList();
for (int i=0;i<lists.size();i++){
mlist.add(lists.get(i).getImage());
}
//设置图片加载器
((ViewHolderA)holder).mbanner.setImageLoader(new GlideImageLoader());
((ViewHolderA)holder).mbanner.setImages(mlist);
((ViewHolderA)holder).mbanner.start();
}else if(holder instanceof ViewHolderB){
mlist=new ArrayList();
for (int i=0;i<lists.size();i++){
mlist.add(lists.get(i).getImage());
}
((ViewHolderB)holder).re.setLayoutManager(new LinearLayoutManager(mcontext));
((ViewHolderB)holder).re.setAdapter(new ViewHolderBa(lists,mcontext));
}
}
@Override
public int getItemCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if(position==0){
return Item_Type.Typeone.ordinal();
}else if(position==1){
return Item_Type.Typetwo.ordinal();
}
return -1;
}
class ViewHolderA extends RecyclerView.ViewHolder{
private Banner mbanner;
public ViewHolderA(View itemView) {
super(itemView);
mbanner=(Banner)itemView.findViewById(R.id.mybanner);
}
}
class ViewHolderB extends RecyclerView.ViewHolder{
private RecyclerView re;
public ViewHolderB(View itemView) {
super(itemView);
re = (RecyclerView) itemView.findViewById(R.id.id_recyclerview);
}
}
}
recycle_item_a(banner轮播xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="150dp">
<com.youth.banner.Banner
android:id="@+id/mybanner"
android:layout_width="match_parent"
android:layout_height="150dp">
</com.youth.banner.Banner>
</LinearLayout>
recycle_item_a(Recyclerview布局xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/id_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
ViewHolderBa(Recyclerview小适配器)
public class ViewHolderBa extends RecyclerView.Adapter<ViewHolderBa.MyViewHolder>{
List<MyGsonFr.TopStoriesBean> lists;
Context mc;
public ViewHolderBa(List<MyGsonFr.TopStoriesBean> lists, Context mc) {
this.lists = lists;
this.mc = mc;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mc).inflate(R.layout.item_home, parent, false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(lists.get(position).getTitle());
ImageLoader instance = ImageLoader.getInstance();
instance.displayImage(lists.get(position).getImage(),holder.img);
}
@Override
public int getItemCount() {
return lists.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
ImageView img;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.text_a1);
img = (ImageView) view.findViewById(R.id.img_a1);
}
}
}
来源:http://blog.csdn.net/qq_39493777/article/details/78346315


猜你喜欢
- 编译常见问题在开发过程中,有碰到过一些由于编译优化导致的代码修改并不符合我们预期的情况。这也就是之前为什么我经常说编译产物其实是不太可以被信
- 前言在项目开发中,日志系统是必不可少的,用AOP在Web的请求做入参和出参的参数打印,同时对异常进行日志打印,避免重复的手写日志,完整案例见
- ArrayList集合的创建非泛型创建ArrayList集合对象,可以添加任意Object子类元素至集合//非泛型创建的ArrayList集
- package GraphicsCanvas;import java.awt.BorderLayout;import java.awt.Ca
- 前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的
- switch语句的格式如下:(它的功能是选出一段代码执行) switch(整数选择因子) { case 整数值1 : 语句; break;
- 用Stopwatch分段监控了一下,发现耗时最多的函数是SaveToExcel此函数中遍列所有数据行,通过Replace替换标签生成Exce
- 我们编写的是Andorid的HTTP协议多线程断点下载应用程序。直接使用单线程下载HTTP文件对我们来说是一件非常简单的事。那么,多线程断点
- 最近看代码,由于代码的调用层级深度比较多,层层深入到某处时,已经忘记了身处何处,虽然自己可以使用一些画图工具来时序图,但是,这种情况下,自己
- 本篇文章介绍:如何使用Toolbar;自定义Toolbar;先来看一看效果,了解一下toolbar;布局文件:<android.sup
- 本文实例讲述了C#使用foreach语句简单遍历数组的方法。分享给大家供大家参考。具体如下:using System;public clas
- 直接上代码public static class ImageCompress { /// <su
- 无论是我们在使用word还是记事本,系统都会为我们提供撤销的功能,这几乎是人人都会使用到的功能,而在我们实际开发中,会不会存在一个很复杂的对
- public static string Escape(string s) &nb
- 本文实例讲述了Android开发之TabActivity用法。分享给大家供大家参考,具体如下:一.简介TabActivity继承自Activ
- 之前一直在Android应用层上做工作,最近开始研究Android平台上的东东了,主要是在Android Frameworks层和系统库层进
- 主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检
- 场景在任何一个Form表单的操作页面或者数据台账的查询页面,基本都会看到一个清除的按钮,其功能就是用来清除我们需要抛弃的已经写入到控件内的数
- 文中涉及到文件名称排序,固定根目录以及返回上一层在上面,方便选择等。根据文件后缀,筛选文件还没做。先看效果。1、效果图2、核心代码如下是通过
- 前言先说结论,tauri是一个非常优秀的前端桌面开发框架,但是,rust门槛太高了。一开始我是用electron来开发的,但是打包后发现软件