Android XRecyclerView實(shí)現(xiàn)多條目加載
本文實(shí)例為大家分享了Android實(shí)現(xiàn)多條目加載展示的具體代碼,供大家參考,具體內(nèi)容如下
展示效果

依賴
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" />
代碼區(qū)
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(首頁以第一個(gè)fragment 里面的API是自行供應(yīng)的接口)
public class OneFragment extends Fragment {
private XRecyclerView xr;
private List<String> list = new ArrayList<>();
//獲取數(shù)據(jù)的開始
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(適配器對(duì)條目)
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;
}
//創(chuàng)建適配器有參構(gòu)造
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());
}
//設(shè)置圖片加載器
((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);
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用Android MenuInflater創(chuàng)建菜單項(xiàng)的方法步驟
本篇文章小編為大家介紹,用Android MenuInflater創(chuàng)建菜單項(xiàng)的方法步驟。需要的朋友參考下2013-04-04
詳解Andorid開發(fā)中反射機(jī)制是怎么一回事
反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對(duì)于任何一個(gè)對(duì)象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱為Java的反射機(jī)制2022-11-11
Android實(shí)現(xiàn)下載m3u8視頻文件問題解決
這篇文章主要介紹了Android實(shí)現(xiàn)下載m3u8視頻文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Android自定義ViewGroup之FlowLayout(三)
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup之FlowLayout,常用于關(guān)鍵字標(biāo)簽,搜索熱詞列表等功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Android ProgressDialog進(jìn)度條使用詳解
這篇文章主要對(duì)Android開發(fā)之ProgressDialog讀取文件進(jìn)度進(jìn)行解析,感興趣的朋友可以參考一下2016-02-02
Android開發(fā)之日歷CalendarView用法示例
這篇文章主要介紹了Android開發(fā)之日歷CalendarView用法,簡(jiǎn)單分析了日歷CalendarView組件的功能、屬性設(shè)置方法、界面布局、事件監(jiān)聽等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
淺析KJFrameForAndroid框架如何高效加載Bitmap
Bitmap是Android系統(tǒng)中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進(jìn)行圖像剪切、旋轉(zhuǎn)、縮放等操作,并可以指定格式保存圖像文件。本文主要是從KJFrameForAndroid框架中分析高效加載Bitmap的方法2014-07-07

