您的位置:首页 > 其它

TabLayout上导航栏+PullToRefreshListView展示数据

2017-09-20 15:13 465 查看
<----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("休息视频");

10605
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: