implementation 'com.android.support:design:26.+' compile 'com.github.userswlwork:pull-to-refresh:1.0.0'package com.example.slx.slx1_13; import android.os.AsyncTask; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; /** * Created by lenovo on 2018/1/11. */ public class MyTask extends AsyncTask<String,Void,String>{ private ICallBacks iCallBacks; private InputStream inputStream; public MyTask(ICallBacks iCallBacks) { this.iCallBacks = iCallBacks; } @Override protected String doInBackground(String... strings) { try { URL url = new URL(strings[0]); HttpURLConnection urlConnection =(HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setConnectTimeout(2000); urlConnection.setReadTimeout(2000); if(urlConnection.getResponseCode()==200){ inputStream = urlConnection.getInputStream(); }else if(urlConnection.getResponseCode() == 301 || urlConnection.getResponseCode() == 302) { String location = urlConnection.getHeaderField("location"); URL newurl = new URL(location); HttpURLConnection newurlConnection =(HttpURLConnection) newurl.openConnection(); newurlConnection.setRequestMethod("GET"); newurlConnection.setConnectTimeout(2000); newurlConnection.setReadTimeout(2000); if(newurlConnection.getResponseCode() == 200){ inputStream = newurlConnection.getInputStream(); } } ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] bytes = new byte[1024]; int len; while ((len=inputStream.read(bytes))!=-1){ byteArrayOutputStream.write(bytes,0,len); } String s = byteArrayOutputStream.toString(); return s; } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { iCallBacks.getJson(s); } public interface ICallBacks{ void getJson(String s); } }package com.example.slx.slx1_13; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.support.v7.app.AlertDialog; /** * Created by lenovo on 2018/1/12. */ public class NetUtils { //判断有无网络的方法 public static boolean isConn(Context context){ //1.得到系统服务 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //2.得到网络信息类对象-需要添加权限 //清单文件配置: NetworkInfo info = manager.getActiveNetworkInfo(); //3.进行判断 if(info!=null && info.isAvailable()){//已经连接网络 return true; }else{ return false; } } //如果没有网络的情况下,弹出一个对话框,打开设置页面 public static void openNetDialog(final Context context){ AlertDialog.Builder builder=new AlertDialog.Builder(context); builder.setTitle("提示"); builder.setMessage("没有网络,是否进行设置?"); builder.setPositiveButton("设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //跳转到系统设置页面-隐士跳转 Intent intent = null; // 先判断当前系统版本 if(android.os.Build.VERSION.SDK_INT > 10){ // 3.0以上 intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS); }else{ intent = new Intent(); intent.setClassName("com.android.settings", "com.android.settings.WirelessSettings"); } context.startActivity(intent); } }); builder.setNegativeButton("取消",null); AlertDialog dialog = builder.create(); dialog.show(); } }package com.example.slx.slx1_13; import android.app.Application; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import java.io.File; /** * Created by lenovo on 2018/1/11. */ public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); File cachefile=getExternalCacheDir(); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽 .threadPoolSize(2)//线程池的数量 .threadPriority(4) .memoryCacheSize(2*1024*1024)//设置内存缓存区大小 .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小 .diskCache(new UnlimitedDiscCache(cachefile))//自定义缓存目录 .writeDebugLogs()//打印日志内容 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理 .build(); ImageLoader.getInstance().init(config); } }package com.example.slx.slx1_13; import android.os.Handler; import android.os.Message; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import android.widget.ScrollView; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshScrollView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<Goods.DataBean> listGoods=new ArrayList<>(); private int pageIndex=1; private int oper=1; private String url="http://120.27.23.105/product/getProductCatagory?cid=1"; private TabLayout myTab; private ViewPager viewPager; private ListView listView; private PullToRefreshScrollView ps; private MyAdapter myAdapter; private MyPageAdapter myPageAdapter; private List<String> listText; private ArrayList<String> listImage = new ArrayList<>(); private int i=1; private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); viewPager.setCurrentItem(msg.what); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (NetUtils.isConn(this)){ myTab = findViewById(R.id.myTab); myTab.addTab(myTab.newTab().setText("推荐0")); myTab.addTab(myTab.newTab().setText("推荐0")); myTab.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); viewPager=findViewById(R.id.viewPager); listView = findViewById(R.id.listView); ps = findViewById(R.id.ps); initData();//请求数据 initPs();//下拉上拉 }else { NetUtils.openNetDialog(this); } } private void initPs() { ps.setMode(PullToRefreshBase.Mode.BOTH); ps.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) { oper=1; pageIndex=1; url="http://120.27.23.105/product/getProductCatagory?cid=1"; initData(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) { oper=1; pageIndex++; url="http://120.27.23.105/product/getProductCatagory?cid=1"; initData(); } }); } private void initData() { MyTask myTask = new MyTask(new MyTask.ICallBacks() { @Override public void getJson(String s) { Gson gson = new Gson(); Goods goods = gson.fromJson(s, Goods.class); //listGoods = goods.getData(); listGoods.addAll(goods.getData()); for (int j = 0; j < listGoods.size(); j++) { List<Goods.DataBean.ListBean> list = listGoods.get(i).getList(); for (int k = 0; k <list.size() ; k++) { String images = list.get(i).getIcon(); listImage.add(images); } } if(myPageAdapter==null){ myPageAdapter = new MyPageAdapter(MainActivity.this,listImage); viewPager.setAdapter(myPageAdapter); }else { myPageAdapter.notifyDataSetChanged(); } if(myAdapter==null){ myAdapter = new MyAdapter(MainActivity.this, listGoods); listView.setAdapter(myAdapter); }else { myAdapter.notifyDataSetChanged(); } ps.onRefreshComplete(); } }); myTask.execute("http://120.27.23.105/product/getProductCatagory?cid=1"); new Thread(){ @Override public void run() { super.run(); while (true){ try { sleep(2000); i++; handler.sendEmptyMessage(i); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } }package com.example.slx.slx1_13; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.TextView; import java.util.List; /** * Created by lenovo on 2018/1/12. */ public class MyAdapter extends BaseAdapter { private Context context; private List<Goods.DataBean> list; public MyAdapter(Context context, List<Goods.DataBean> 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.itemlayout,null); holder=new ViewHolder(); holder.textView=view.findViewById(R.id.textView); holder.gridView=view.findViewById(R.id.gridView); view.setTag(holder); }else { holder=(ViewHolder)view.getTag(); } holder.textView.setText(list.get(i).getName()); List<Goods.DataBean.ListBean> gridlist = this.list.get(i).getList(); MyGridViewAdapter myGridViewAdapter = new MyGridViewAdapter(context,gridlist); holder.gridView.setAdapter(myGridViewAdapter); return view; } public class ViewHolder{ TextView textView; GridView gridView; } }package com.example.slx.slx1_13; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import java.util.List; /** * Created by lenovo on 2018/1/12. */ public class MyPageAdapter extends PagerAdapter{ private Context context; private List<String> list; private DisplayImageOptions options; public MyPageAdapter(Context context, List<String> list) { this.context = context; this.list = list; options = new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时 .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式 .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式 .build(); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(context); ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView,options); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }package com.example.slx.slx1_13; import android.app.Application; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import java.io.File; /** * Created by lenovo on 2018/1/11. */ public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); File cachefile=getExternalCacheDir(); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽 .threadPoolSize(2)//线程池的数量 .threadPriority(4) .memoryCacheSize(2*1024*1024)//设置内存缓存区大小 .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小 .diskCache(new UnlimitedDiscCache(cachefile))//自定义缓存目录 .writeDebugLogs()//打印日志内容 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理 .build(); ImageLoader.getInstance().init(config); } }package com.example.slx.slx1_13; import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /** * Created by lenovo on 2018/1/12. */ public class MyList extends ListView{ public MyList(Context context) { super(context); } public MyList(Context context, AttributeSet attrs) { super(context, attrs); } public MyList(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int newHeight= MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, newHeight); } }package com.example.slx.slx1_13; import android.content.Context; import android.util.AttributeSet; import android.widget.GridView; /** * Created by lenovo on 2018/1/12. */ public class MyGrid extends GridView{ public MyGrid(Context context) { super(context); } public MyGrid(Context context, AttributeSet attrs) { super(context, attrs); } public MyGrid(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int newHeight=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, newHeight); } }
横向滑动菜单+上拉刷新+图片轮播+listView(TextView,GridView)+下拉加载
最新推荐文章于 2024-06-22 17:30:22 发布