Android Xrecyclervie,TabLayout+Fragment,综合
来源:互联网 发布:js中alert输出变量 编辑:程序博客网 时间:2024/06/05 21:29
先看一下效果:
项目结构:
1.导入依赖:
//tablayout compile 'com.android.support:design:24.2.1'// Okhttp请求以及Gson解析 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 'com.google.code.gson:gson:2.8.2'// banner使用 compile 'com.youth.banner:banner:1.4.9' //glide compile 'com.github.bumptech.glide:glide:3.7.0'// imageolader compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'// logger日志的使用 compile 'com.orhanobut:logger:2.1.1' /*xRecyclerview*/ compile 'com.jcodecraeer:xrecyclerview:1.3.2' /*recyclerview*/ compile 'com.github.liuguangqiang.SuperRecyclerView:super-recyclerview:0.1.2'
配置权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2.写布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="xuejian.baway.com.yuedemo1.MainActivity"> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" tools:tabMode="scrollable" app:tabSelectedTextColor="#f00" /> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#ffffff" /></LinearLayout>
Fragmnet页面的布局zuixin.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="match_parent">//xrecyclerview <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xRecyclerview" android:layout_width="match_parent" android:layout_height="match_parent" > </com.jcodecraeer.xrecyclerview.XRecyclerView></LinearLayout>
zuixin.xml里边嵌套的banner的布局文件:
<?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>
zuixin里边:recyclerview.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="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/item_recyclerview" android:layout_width="match_parent" android:layout_height="wrap_content" > </android.support.v7.widget.RecyclerView></LinearLayout>
zuixin里边:item.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="match_parent"> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:gravity="center_vertical" android:layout_height="wrap_content"> <ImageView android:id="@+id/zuixin_item_img" android:layout_width="50dp" android:layout_height="50dp" android:src="@mipmap/ic_launcher" /> <TextView android:layout_marginLeft="10dp" android:id="@+id/zuixin_item_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="标题" /> </LinearLayout></LinearLayout>
zhuti.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="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/zhuti_recyclerview" android:layout_width="match_parent" android:layout_height="wrap_content" > </android.support.v7.widget.RecyclerView></LinearLayout>
zhuti.xml的item文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_centerInParent="true" android:layout_height="wrap_content"> <ImageView android:id="@+id/zhuti_item_img" android:layout_width="180dp" android:layout_height="180dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/zhuti_item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" android:layout_alignBottom="@+id/zhuti_item_img" android:layout_centerHorizontal="true" android:layout_marginBottom="13dp" /></RelativeLayout>
3.在MainActivity中实现tablayout和fragment结合:
public class MainActivity extends FragmentActivity { private TabLayout tabLayout; private FragmentManager fm; private FragmentTransaction beginTransaction; private ZuiXin zuiXin; private ZhuanGui zhuanGui; private ReMen reMen; private ZhuTi zhuTi; private ArrayList<Fragment> fragments; private MyfragAdapter myfragAdapter; private ViewPager viewPager; private String[] titles = {"最新日报", "专柜", "热门","主题日报"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initfrags(); } private void initView() { tabLayout = (TabLayout) findViewById(R.id.tabLayout); viewPager = (ViewPager) findViewById(R.id.viewPager); } private void initfrags() { fm = getSupportFragmentManager(); beginTransaction = fm.beginTransaction(); fragments = new ArrayList<>(); zuiXin = new ZuiXin(); zhuanGui = new ZhuanGui(); reMen = new ReMen(); zhuTi = new ZhuTi(); fragments.add(zuiXin); fragments.add(zhuanGui); fragments.add(reMen); fragments.add(zhuTi); myfragAdapter = new MyfragAdapter(fm); viewPager.setAdapter(myfragAdapter); //绑定viewpager tabLayout.setupWithViewPager(viewPager); //设置为滑动 tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); } //适配器 class MyfragAdapter extends FragmentPagerAdapter{ //重写这个方法,将设置每个Tab的标题 @Override public CharSequence getPageTitle(int position) { return titles[position]; } public MyfragAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } }}
4.第一个fragment页:zuixin页面用Xrecyclerview的请求数据:
导入的包为:
import android.support.v4.app.Fragment;
public class ZuiXin extends Fragment{ private TextView textView; private View view; private XRecyclerView xRecyclerview; String shouYePath = "http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage"; private int curr; private List<String> list=new ArrayList<>(); @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.frag_zuixin, container, false); textView = (TextView) view.findViewById(R.id.textView); initView(); //分割线 xRecyclerview.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL_LIST)); //listview布局 xRecyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); //监听事件 xRecyclerview.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() {//刷新 curr=0; list.clear(); getData(shouYePath,curr); xRecyclerview.refreshComplete(); } @Override public void onLoadMore() {//加载 /* //curr为页数 curr++; getData(API.TYPE_HOME,curr); xr.refreshComplete();*/ } }); //请求数据 getData(shouYePath,1); return view; } private void initView() { xRecyclerview = (XRecyclerView) view.findViewById(R.id.xRecyclerview); } private void getData(String shouYePath, int curr) { OkHttp3Utils.getInstance().doGet(shouYePath, new GsonObjectCallback<ZuiXinBean>() { @Override public void onUi(ZuiXinBean zuiXinBean) { ZuiXinBean.DataBean dataBean = zuiXinBean.getData(); XrAdapter xrAdapter = new XrAdapter(getActivity(),dataBean); xRecyclerview.setAdapter(xrAdapter);//设置适配器 } @Override public void onFailed(Call call, IOException e) { } }); }}
对应的XrAdapter适配器:
public class XrAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context context; ZuiXinBean.DataBean list; private ArrayList mlist; private enum Item_Type{ type1, type2 } public XrAdapter(Context context, ZuiXinBean.DataBean list) { this.context = context; this.list = list; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == Item_Type.type1.ordinal()){ View view = LayoutInflater.from(context).inflate(R.layout.frag_zuixin_banner,null); ViewHolderA viewHolder = new ViewHolderA(view); return viewHolder; } else if(viewType == Item_Type.type2.ordinal()){ View view = LayoutInflater.from(context).inflate(R.layout.frag_zuixin_rcv,null); ViewHolderB viewHolder = new ViewHolderB(view); return viewHolder; } return null; } @Override public int getItemViewType(int position) { if (position==0){ return Item_Type.type1.ordinal(); } else if(position==1){ return Item_Type.type2.ordinal(); } return -1; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {//banner轮播图 if (holder instanceof ViewHolderA){ mlist = new ArrayList(); for (int i = 0;i<list.getAd1().size();i++){ mlist.add(list.getAd1().get(i).getImage()); Toast.makeText(context,list.getAd1().get(i).getTitle(),Toast.LENGTH_SHORT); } //设置图片加载器 ((ViewHolderA)holder).mybanner.setImageLoader(new BannerGlideImageLoader()); ((ViewHolderA)holder).mybanner.setImages(mlist); ((ViewHolderA)holder).mybanner.start(); } else if(holder instanceof ViewHolderB){//底部的recyclerview ((ViewHolderB)holder).item_recyclerview.setLayoutManager(new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,true)); ((ViewHolderB)holder).item_recyclerview.setAdapter(new ItemAdapter(1,context,list)); } } @Override public int getItemCount() { return 2; } class ViewHolderA extends RecyclerView.ViewHolder{ public Banner mybanner; public ViewHolderA(View view) { super(view); mybanner = (Banner) view.findViewById(R.id.mybanner); } } class ViewHolderB extends RecyclerView.ViewHolder { public RecyclerView item_recyclerview; public ViewHolderB(View view) { super(view); item_recyclerview = (RecyclerView) view.findViewById(R.id.item_recyclerview); } }}
5.轮播图加载要用到:BannerGlideImageLoader类:
import android.content.Context;import android.widget.ImageView;import com.bumptech.glide.Glide;import com.youth.banner.loader.ImageLoader;/** * 重写图片加载器 */public class BannerGlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Glide.with(context).load((String)path).into(imageView); }}
6.加载条目图片用到的MyApp类初始化imageoader和okhttp3的单例:
记得到清单文件里的里边去配置一下
<application android:name=".utils.MyApp"
import android.app.Application;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;public class MyApp extends Application{ public static MyApp mInstance; @Override public void onCreate() { super.onCreate(); mInstance=this; //初始化imageloader ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(getApplicationContext()); ImageLoader.getInstance().init(configuration); } public static MyApp getInstance() { return mInstance; }}
7.主题页底部列表的ItemAdapter:
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.staggerView>{ int itemTypeid; Context context; ZuiXinBean.DataBean dataBean; public ItemAdapter(int itemTypeid, Context context, ZuiXinBean.DataBean dataBean) { this.itemTypeid = itemTypeid; this.context = context; this.dataBean = dataBean; } @Override public staggerView onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType==1){ View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.frag_zuixin_item, null, false); staggerView staggerView = new staggerView(view1); return staggerView; } return null; } @Override public void onBindViewHolder(staggerView holder, int position) { if (itemTypeid==1){ holder.zuixin_item_title.setText(dataBean.getDefaultGoodsList().get(position).getGoods_name()); ImageLoader.getInstance().displayImage(dataBean.getDefaultGoodsList().get(position).getGoods_img(),holder.zuixin_item_img); } } @Override public int getItemCount() { if (itemTypeid==1){ return dataBean.getDefaultGoodsList().size(); } return 0; } @Override public int getItemViewType(int position) { return 1; } class staggerView extends RecyclerView.ViewHolder{ public ImageView zuixin_item_img; public TextView zuixin_item_title; public staggerView(View itemView) { super(itemView); zuixin_item_img = (ImageView) itemView.findViewById(R.id.zuixin_item_img); zuixin_item_title = (TextView) itemView.findViewById(R.id.zuixin_item_title); } }}
8.主题页Fragment页面zhuti:
public class ZhuTi extends Fragment{ private TextView textView; private View view; String shouYePath = "http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage"; private List<String> list=new ArrayList<>(); private RecyclerView zhuti_recyclerview; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag_zhuti, container, false); textView = (TextView) view.findViewById(R.id.textView); getData(); zhuti_recyclerview = (RecyclerView) view.findViewById(R.id.zhuti_recyclerview); //分割线 zhuti_recyclerview.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.HORIZONTAL_LIST)); //gridview布局 zhuti_recyclerview.setLayoutManager(new GridLayoutManager(getActivity(),2)); //请求数据 return view; } //网络请求 private void getData() { OkHttp3Utils.getInstance().doGet(shouYePath, new GsonObjectCallback<ZuiXinBean>() { @Override public void onUi(ZuiXinBean zuiXinBean) { ZuiXinBean.DataBean dataBean = zuiXinBean.getData(); ZhuTiItemAdapter zhuTiItemAdapter = new ZhuTiItemAdapter(getActivity(), dataBean); zhuti_recyclerview.setAdapter(zhuTiItemAdapter); } @Override public void onFailed(Call call, IOException e) { } }); }}
对应的适配器:ZhuTiItemAdapter:
public class ZhuTiItemAdapter extends RecyclerView.Adapter<ZhuTiItemAdapter.staggerView>{ Context context; ZuiXinBean.DataBean dataBean; public ZhuTiItemAdapter(Context context, ZuiXinBean.DataBean dataBean) { this.context = context; this.dataBean = dataBean; } @Override public staggerView onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.frag_zhuti_item, null, false); staggerView staggerView = new staggerView(view); return staggerView; } @Override public void onBindViewHolder(staggerView holder, int position) { holder.zhuti_item_title.setText(dataBean.getDefaultGoodsList().get(position).getGoods_name()); ImageLoader.getInstance().displayImage(dataBean.getDefaultGoodsList().get(position).getGoods_img(),holder.zhuti_item_img); } @Override public int getItemCount() { return dataBean.getDefaultGoodsList().size(); } class staggerView extends RecyclerView.ViewHolder{ public ImageView zhuti_item_img; public TextView zhuti_item_title; public staggerView(View itemView) { super(itemView); zhuti_item_img = (ImageView) itemView.findViewById(R.id.zhuti_item_img); zhuti_item_title = (TextView) itemView.findViewById(R.id.zhuti_item_title); } }}具体的TabLayout的更多实现方法看这里: http://blog.csdn.net/qq_33425116/article/details/52599818
阅读全文
1 0
- Android Xrecyclervie,TabLayout+Fragment,综合
- NavigationView+ToolBar+TabLayout+ViewPager+Fragment综合使用
- TabLayout+Fragment android design
- Tablayout+ViewPager+Fragment(Android)
- Android tablayout+fragment
- Android Tab(TabLayout+Fragment)
- Android Fragment viewPage TabLayout用法。
- Android tablayout集合fragment使用
- Android Fragment综合理解
- android tablelayout嵌套tablayout Fragment嵌套Fragment
- TabLayout+Fragment
- TabLayout+Fragment
- TabLayout+Fragment
- tablayout+fragment
- 【Android】viewpager+fragment+tablayout实现滑动菜单栏
- Android AppBarLayout+TabLayout+RecyclerView+ViewPager+Fragment
- android中TabLayout与Fragment相结合
- android,安卓,TabLayout + ViewPager + Fragment
- 外星人笔记本,win10专业版装不了GTX1070驱动问题解决
- AngularJs订单列表的样式
- codevs 1017 乘积最大 dfs
- golang基础-排序、二分查找、map、map排序反转
- 【nginx】 NGINX 进程通信机制
- Android Xrecyclervie,TabLayout+Fragment,综合
- cmd 切换管理员
- UVALive 7662 Perfect Matchings
- Python的web服务开发环境搭建过程
- spark on hive 写入hdfs
- Linux环境安装SonarQube,windows使用SonarQube Runner完整实例
- jrebel、JavaRebel
- qsort
- Tablayout