TabLayout上导航栏+PullToRefreshListView展示数据
来源:互联网 发布:上海合作组织 知乎 编辑:程序博客网 时间:2024/05/22 00:39
<----TabLayout布局--------> <?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:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="50dp" app:tabGravity="center" app:tabIndicatorColor="#ff0000" app:tabMode="scrollable" app:tabSelectedTextColor="#ff0000" app:tabTextColor="#00ff00"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_below="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </RelativeLayout> <----PullToRefreshListView布局---> <?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"> <com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/refresh_list_view" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" ptr:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF" > </com.handmark.pulltorefresh.library.PullToRefreshListView> </LinearLayout> <----适配器 布局------> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:padding="10dp"> <ImageView android:src="@mipmap/ic_launcher" android:id="@+id/image_view" android:layout_width="100dp" android:layout_height="100dp" /> <TextView android:id="@+id/text_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" /> </LinearLayout> <---主页面-----> package com.example.a18_zhoukao_test; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; private List<String> titleList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabLayout = (TabLayout) findViewById(R.id.tab_layout); viewPager = (ViewPager) findViewById(R.id.view_pager); titleList = new ArrayList<>(); titleList.add("福利"); titleList.add("Android"); titleList.add("IOS"); titleList.add("休息视频"); titleList.add("拓展资源"); titleList.add("前端"); titleList.add("all"); /** * viewPager需要设置容器中装的页面数量,默认是三页,,,否则在切换的时候前面的再切换回来就不显示了 */ viewPager.setOffscreenPageLimit(titleList.size()); //设置适配器 viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public CharSequence getPageTitle(int position) { //展示的标题 return titleList.get(position); } @Override public Fragment getItem(int position) { //....fragment集合viewPager使用的时候,fragment是new出来的 NewsFragment newsFragment = new NewsFragment(); Bundle bundle = new Bundle(); //把当前位置的标题传递过去 bundle.putString("name",titleList.get(position)); newsFragment.setArguments(bundle); return newsFragment; } @Override public int getCount() { return titleList.size(); } }); //绑定在一起 tabLayout.setupWithViewPager(viewPager); } } <--- PullToRefreshListView页面---> package com.example.a18_zhoukao_test; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.ILoadingLayout; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * @author Dash * @date 2017/9/18 * @description: */ public class NewsFragment extends Fragment { private View view; private PullToRefreshListView refreshListView; private String param; private String path; private int page_num = 1; private List<DataDataBean.ResultsBean> list = new ArrayList<>(); private MyAdapter myAdapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_layout,container,false); refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle bundle = getArguments(); param = bundle.getString("name", "Android"); //请求数据,,,设置适配器 getData(); refreshListView.setMode(PullToRefreshBase.Mode.BOTH); ILoadingLayout startLabels = refreshListView.getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉刷新"); startLabels.setRefreshingLabel("正在刷新..."); startLabels.setReleaseLabel("放开刷新"); ILoadingLayout endLabels = refreshListView.getLoadingLayoutProxy( false, true); endLabels.setPullLabel("上拉刷新"); endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新..."); //设置监听 refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { getRefreshData(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { //上拉加载的时候 page_num加一 page_num ++; getData(); } }); } /** * 获取刷新时的数据...刷新时只访问第一页的数据,,,,刷新的数据需要添加到集合的前边 * * 刷新完成,,设置适配器之后刷新需要停止 */ private void getRefreshData() { AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { try { String path = "http://gank.io/api/data/"+ URLEncoder.encode(param,"utf-8")+"/10/1"; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); //获取 int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); String json = streamToString(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String s) { //解析 Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class); /** * 判断数据非空 */ if (dataDataBean != null && dataDataBean.getResults() != null){ //数据添加 list.addAll(0,dataDataBean.getResults()); //设置适配器 setAdapter(); //停止刷新 refreshListView.onRefreshComplete(); } } }; asyncTask.execute(); } /** * 这个方法是刚进入界面的时候请求数据,,,,和上拉加载的时候不停的请求数据 * * page_num每次加载的时候会加1,,,这个方法中数据添加在list集合的后面 * * 请求设置适配器之后 刷新停止 */ private void getData() { AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { try { String path = "http://gank.io/api/data/"+ URLEncoder.encode(param,"utf-8")+"/10/"+page_num; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); //获取 int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); String json = streamToString(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String s) { //解析 Gson gson = new Gson(); DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class); /** * 判断数据非空 */ if (dataDataBean != null && dataDataBean.getResults() != null){ //数据添加 list.addAll(dataDataBean.getResults());//拿到的是每一页的数据的集合 //设置适配器 setAdapter(); //刷新停止 refreshListView.onRefreshComplete(); } } }; asyncTask.execute(); } private void setAdapter() { if (myAdapter == null){ myAdapter = new MyAdapter(getActivity(),list); refreshListView.setAdapter(myAdapter); }else { myAdapter.notifyDataSetChanged(); } } private String streamToString(InputStream inputStream,String charset) { try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String s = null; StringBuilder builder = new StringBuilder(); while ((s = bufferedReader.readLine()) != null){ builder.append(s); } bufferedReader.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } } <---适配器页面----> package com.example.a18_zhoukao_test; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; /** * @author Dash * @date 2017/9/18 * @description: */ public class MyAdapter extends BaseAdapter { Context context; List<DataDataBean.ResultsBean> list; public MyAdapter(Context context, List<DataDataBean.ResultsBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view == null){ view = View.inflate(context,R.layout.item_layout,null); holder = new ViewHolder(); holder.imageView = (ImageView) view.findViewById(R.id.image_view); holder.textView = (TextView) view.findViewById(R.id.text_title); view.setTag(holder); }else { holder = (ViewHolder) view.getTag(); } //设置 holder.textView.setText(list.get(i).getDesc()); /** * 加载图片之前需要判断一下是否有图片的地址 */ if (list.get(i).getImages() != null){ ImageLoader.getInstance().displayImage(list.get(i).getImages().get(0)+"?imageView2/0/w/100",holder.imageView,ImageLoaderUtil.getDefaultOption()); } return view; } private class ViewHolder{ ImageView imageView; TextView textView; } } <---定义 imageLoader----> package com.example.a18_zhoukao_test; import android.app.Application; /** * @author Dash * @date 2017/9/18 * @description: */ public class BaseApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderUtil.init(this); } } <---imageloader----> package com.example.a18_zhoukao_test; import android.content.Context; import android.graphics.Bitmap; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.decode.BaseImageDecoder; import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer; import com.nostra13.universalimageloader.core.download.BaseImageDownloader; import com.nostra13.universalimageloader.utils.StorageUtils; import java.io.File; /** * @author Dash * @date 2017/9/18 * @description: */ public class ImageLoaderUtil { /** * 初始化的方法 * * @param */ public static void init(Context context) { File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .threadPoolSize(3) // default 线程池内加载的数量 .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级 .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .memoryCacheSizePercentage(13) // default .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径 .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .diskCacheFileCount(100) // 可以缓存的文件数量 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) .imageDownloader(new BaseImageDownloader(context)) // default .imageDecoder(new BaseImageDecoder(true)) // default .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() // 打印debug log .build(); //开始构建 ImageLoader.getInstance().init(config); } /** * 展示图片的默认配置选项 */ public static DisplayImageOptions getDefaultOption() { DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片 .resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位 .delayBeforeLoading(1000) // 下载前的延迟时间 .cacheInMemory(true) // default 设置下载的图片是否缓存在内存中 .cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中 .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型 .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20) .build(); return options; } } <---清单列表-----> <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.a18_zhoukao_test"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <application android:name=".BaseApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/NoTitleTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
阅读全文
0 0
- TabLayout上导航栏+PullToRefreshListView展示数据
- 抽屉布局+Fragment+TabLayout上导航栏+PullToRefreshListView+轮播图+PullToRefreshGridView
- TabLayout标题栏传值+PullToRefreshListView展示数据
- TabLayout展示数据
- TabLayout+PullToRefreshListView上拉刷新,下拉加载,imageloader自定义
- TabLayout 滑动导航栏
- TabLayout实现导航栏
- tablayout底部导航栏
- TabLayout+ViewPage导航栏
- tablayout导航栏
- Tablayout显示导航栏
- Tablayout实现导航栏
- TabLayout导航栏
- TabLayout+PullToRefreshListView连用
- TabLayout+PullToRefreshListView连用
- 侧滑,tablayout,PullToRefreshListView
- TabLayout与PullToRefreshListView
- PullToRefreshListView+Tablayout+Fragment+DrawerLayout
- THINKPHP 读取oracle乱码问题解决方案
- thinking in java——多态
- Java 线程池 ThreadPoolExecutor.(包含拒绝策略CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy )
- Python中的内置模块和第三方模块
- iOS 音视频合成
- TabLayout上导航栏+PullToRefreshListView展示数据
- C# DataTable-(乱七八糟-01)-查询日期区间内,统计不存在的维度值,显示且设置值为0
- c++函数中的值传递以及引用传递
- java 日期计算
- securecrt 光标消失
- Lambda表达式
- js 数组是不是相等
- 最新Android的SDK版本与API Level的对应关系
- jQuery-创建、删除、复制、替换、包裹节点