-----------------------------activity_main---------------------
<?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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.com.myapplication.MainActivity"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="0dp" android:id="@+id/viewpager" android:layout_weight="9" /> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/radio_group" android:layout_weight="1" android:orientation="horizontal" > <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:text="首页" android:checked="true" android:layout_weight="1" android:gravity="center" android:background="@drawable/selector" android:button="@null" android:id="@+id/rb1"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:text="发现" android:layout_weight="1" android:gravity="center" android:background="@drawable/selector" android:button="@null" android:id="@+id/rb2"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:text="附近" android:layout_weight="1" android:gravity="center" android:background="@drawable/selector" android:button="@null" android:id="@+id/rb3"/> <RadioButton android:layout_width="0dp" android:layout_height="match_parent" android:text="我的" android:layout_weight="1" android:gravity="center" android:background="@drawable/selector" android:button="@null" android:id="@+id/rb4"/> </RadioGroup> </LinearLayout>
/**
* 这里写的是Fragment+ViewPager
*/
---------------------------------MainActivity-----------------------------------------------
package com.example.com.myapplication; 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 android.view.View; import android.widget.RadioGroup; import com.example.com.myapplication.Fragment.Fragment01; import com.example.com.myapplication.Fragment.Fragment02; import com.example.com.myapplication.Fragment.Fragment03; import com.example.com.myapplication.Fragment.Fragment04; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ViewPager viewpager; private RadioGroup radio_group; private Fragment01 fragment01; private Fragment02 fragment02; private Fragment03 fragment03; private Fragment04 fragment04; private ArrayList<Fragment> fragmentlist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewpager = findViewById(R.id.viewpager); radio_group = findViewById(R.id.radio_group); fragment01 = new Fragment01(); fragment02 = new Fragment02(); fragment03 = new Fragment03(); fragment04 = new Fragment04(); fragmentlist = new ArrayList<>(); fragmentlist.add(fragment01); fragmentlist.add(fragment02); fragmentlist.add(fragment03); fragmentlist.add(fragment04); viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return fragmentlist.get(position); } @Override public int getCount() { return fragmentlist.size(); } }); viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position){ case 0: radio_group.check(R.id.rb1); break; case 1: radio_group.check(R.id.rb2); break; case 2: radio_group.check(R.id.rb3); break; case 3: radio_group.check(R.id.rb4); break; default: break; } } @Override public void onPageScrollStateChanged(int state) { } }); radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i){ case R.id.rb1: viewpager.setCurrentItem(0); break; case R.id.rb2: viewpager.setCurrentItem(1); break; case R.id.rb3: viewpager.setCurrentItem(2); break; case R.id.rb4: viewpager.setCurrentItem(3); break; } } }); } }
----------------------------Fragment01---------------------------------
import android.annotation.SuppressLint; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.RadioGroup; import com.example.com.myapplication.Adapter.ImageAdapter; import com.example.com.myapplication.Adapter.MyAdapter; import com.example.com.myapplication.Bean; import com.example.com.myapplication.R; import com.example.com.myapplication.Util.JsonUtils; import com.example.com.myapplication.WebActivity; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.ArrayList; import java.util.List; public class Fragment01 extends Fragment { private PullToRefreshListView plv; String json_url = "http://api.expoon.com/AppNews/getNewsList/type/1/p/"; int page = 1; private List<Bean.DataBean> data_da=new ArrayList<>(); private List<Bean.DataBean> data_xiao; private MyAdapter adapter; @SuppressLint("HandlerLeak") private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==0){ int currentItem = pager.getCurrentItem(); currentItem++; pager.setCurrentItem(currentItem); initImg(); } } }; private ViewPager pager; private RadioGroup group; private List<String> list; private String url1 = "http://img03.store.sogou.com/app/a/10010016/cfcba894e555937349610feb534dc72c"; private String url2 = "http://img02.store.sogou.com/app/a/10010016/5654ecf05c472d486d767d9ce5740fa7"; private String url3 = "http://img1.touxiang.cn/uploads/20120509/09-014623_68.jpg"; private String url4 = "http://www.touxiang.cn/uploads/20120518/18-092103_594.jpg"; private int i = 0; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment01, container, false); plv = view.findViewById(R.id.plv); adapter = new MyAdapter(getActivity(),data_da); plv.setAdapter(adapter); plv.setMode(PullToRefreshBase.Mode.BOTH); MyTask(json_url+page); //刷新 plv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { data_da.clear(); MyTask(json_url+page); adapter.notifyDataSetChanged(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) { page++; MyTask(json_url+page); adapter.notifyDataSetChanged(); } }); //加载 plv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = new Intent(getActivity(), WebActivity.class); startActivity(intent); } }); ListView refreshableView = plv.getRefreshableView(); View image_lb = View.inflate(getActivity(),R.layout.activity_image, null); //========================================================================================== refreshableView.addHeaderView(image_lb); pager = image_lb.findViewById(R.id.pager); group = image_lb.findViewById(R.id.group); list = new ArrayList<String>(); list.add(url1); list.add(url2); list.add(url3); list.add(url4); initImg(); ImageAdapter imageAdapter = new ImageAdapter(getActivity(),list); pager.setAdapter(imageAdapter); pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position%list.size()){ case 0: group.check(R.id.rbtn1); break; case 1: group.check(R.id.rbtn2); break; case 2: group.check(R.id.rbtn3); break; case 3: group.check(R.id.rbtn4); break; default: break; } } @Override public void onPageScrollStateChanged(int state) { } }); return view; } private void initImg() { handler.sendEmptyMessageDelayed(0,2000); } private void MyTask(String s) { new MyAsk().execute(s); } private class MyAsk extends AsyncTask<String,Void,String>{ @Override protected String doInBackground(String... strings) { String c = JsonUtils.getJsonData(strings[0]); return c; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); List<Bean.DataBean> data = gson.fromJson(s, Bean.class).getData(); data_da.addAll(data); adapter.notifyDataSetChanged(); new Thread(){ @Override public void run() { super.run(); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); plv.onRefreshComplete(); } } }
--------------------------------fragment01.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.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/plv"/> </RelativeLayout>-------------------------Fragment02-------------------------------
package com.example.com.myapplication.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.com.myapplication.R; import java.util.ArrayList; /** * Tablayout+ViewPager */ public class Fragment02 extends Fragment { private TabLayout tablayout; private ViewPager viewpager; String[] s = {"条目1","条目2","条目3","条目4","条目5","条目6","条目7","条目8","条目9","条目10",}; private ArrayList<Fragment> fragmentArrayList = new ArrayList<Fragment>(); ArrayList<String> titleList = new ArrayList<String>(); private ArrayList<Fragment> fragmentlist = new ArrayList<>(); private Bundle bundle; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment02, container, false); tablayout = view.findViewById(R.id.tablayout); viewpager = view.findViewById(R.id.tab_viewpager); initData(); return view; } private void initData() { tablayout.setupWithViewPager(viewpager); for (int i = 0; i < s.length ; i++) { tablayout.addTab(tablayout.newTab().setText(s[i])); } for (int i = 0; i < s.length; i++) { BlankFragment blankFragment = new BlankFragment(); bundle = new Bundle(); bundle.putString("msg","-"+i); blankFragment.setArguments(bundle); fragmentlist.add(blankFragment); } viewpager.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return fragmentlist.get(position); } @Override public int getCount() { return fragmentlist.size(); } @Override public CharSequence getPageTitle(int position) { return s[position]; } }); } }-----------------------------fragment02.xml------------------------------------
<?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="vertical" xmlns:app="http://schemas.android.com/apk/res-auto"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tablayout" android:layout_weight="1" app:tabMode="scrollable" app:tabTextColor="@color/colorPrimaryDark" app:tabSelectedTextColor="@color/colorAccent" app:tabTextAppearance="@android:style/TextAppearance.Large" app:tabIndicatorHeight="1dp" /> <android.support.v4.view.ViewPager android:id="@+id/tab_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="9" /> </LinearLayout>
----------------------------MyAdapter----------------------------
package com.example.com.myapplication.Adapter; 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.example.com.myapplication.Bean; import com.example.com.myapplication.R; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; public class MyAdapter extends BaseAdapter { private Context context; private List<Bean.DataBean> list; public MyAdapter(Context context, List<Bean.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.item_layout,null); holder = new ViewHolder(); holder.img = view.findViewById(R.id.img); holder.summary = view.findViewById(R.id.summary); holder.title = view.findViewById(R.id.title); view.setTag(holder); }else { holder = (ViewHolder) view.getTag(); } holder.title.setText(list.get(i).getNews_title()); holder.summary.setText(list.get(i).getNews_summary()); ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder.img); return view; } class ViewHolder{ ImageView img; TextView title,summary; } }---------------------ImageAdapter----------------------------
package com.example.com.myapplication.Adapter; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; public class ImageAdapter extends PagerAdapter { private Context context; private List<String> list; public ImageAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @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); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }--------------------ImageLoaderUtil---------------------------
package com.example.com.myapplication.Util; import android.content.Context; import android.graphics.Bitmap; import android.os.Environment; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import java.io.File; /** * */ public class ImageloaderUtil { /** * ImageLoader的配置 * @param context */ public static void initConfig(Context context) { //配置 // File cacheFile=context.getExternalCacheDir(); File cacheFile= new File(Environment.getExternalStorageDirectory()+"/"+"imgages"); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(context) .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); } /** * 获取图片设置类 * @return */ public static DisplayImageOptions getImageOptions(){ DisplayImageOptions optionsoptions=new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式 .build(); return optionsoptions; } }
----------------------JsonUtils--------------------------
package com.example.com.myapplication.Util; import android.util.Log; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; /** * Created by hp on 2018.01.12. */ public class JsonUtils { public static String getJsonData(String jsonurl){ String jsonstr = ""; try { URL url = new URL(jsonurl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); int responseCode = urlConnection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = urlConnection.getInputStream(); byte[] b = new byte[1024]; int len = 0; while ((len = inputStream.read(b))!=-1){ String s = new String(b, 0, len); jsonstr+=s; } Log.d("Main",jsonstr); } } catch (Exception e) { e.printStackTrace(); } return jsonstr; } }------------------------WebActivity------------------------
package com.example.com.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebView; public class WebActivity extends AppCompatActivity { private WebView web_view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); web_view = findViewById(R.id.web_view); web_view.loadUrl("http://download.csdn.net/"); } }-------------------------MyApplicaticon---------------------------------
package com.example.com.myapplication; import android.app.Application; import android.graphics.Bitmap; import android.os.Environment; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; 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.display.RoundedBitmapDisplayer; import java.io.File; public class MyApplicon extends Application { File cacheFile= new File(Environment.getExternalStorageDirectory()+"/"+"imgages"); @Override public void onCreate() { super.onCreate(); //初始化组件,链式开发思想,整个框架的参数初始化配置 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽 .diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个 .tasksProcessingOrder(QueueProcessingType.FIFO) // default .denyCacheImageMultipleSizesInMemory() .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现 .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值 .memoryCacheSizePercentage(13) // default .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值 .diskCacheFileCount(100) // 可以缓存的文件数量 .diskCache(new UnlimitedDiscCache(cacheFile))//自定义缓存目录 // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密 .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default .writeDebugLogs() // 打印debug log .build(); ImageLoader.getInstance().init(configuration); } public class ImageLoaderUtils_circle { public DisplayImageOptions getDisplayImageOption() { DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) //设置图片在下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) //设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)//设置下载的图片是否缓存在内存中 .cacheOnDisk(true) .considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// .displayer(new RoundedBitmapDisplayer(5))//是否设置为圆角,弧度为多少 // .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间 .build();//构建完成 return options; } } }------------------------blankfragment--------------------------
<?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"> <TextView android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview" android:text="-----------" /> </LinearLayout>-------------------------activityimage.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"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="200dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" /> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_centerHorizontal="true" android:layout_alignBottom="@id/pager" android:id="@+id/group"> <RadioButton android:id="@+id/rbtn1" android:checked="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rbtn2" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rbtn3" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rbtn4" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RadioGroup> </RelativeLayout>---------------------Bean-------------------------
package com.example.com.myapplication; import java.util.List; public class Bean { private int status; private String info; private List<DataBean> data; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { /** * news_id : 13811 * news_title : 深港澳台千里连线,嘉年华会今夏入川 * news_summary : 6月17—20日,“2016成都深港澳台嘉年华会”(简称嘉年华会)将在成都世纪城国际会展中心举办。其主办方励展华博借力旗 * pic_url : http://f.expoon.com/sub/news/2016/01/21/887844_230x162_0.jpg */ private String news_id; private String news_title; private String news_summary; private String pic_url; public String getNews_id() { return news_id; } public void setNews_id(String news_id) { this.news_id = news_id; } public String getNews_title() { return news_title; } public void setNews_title(String news_title) { this.news_title = news_title; } public String getNews_summary() { return news_summary; } public void setNews_summary(String news_summary) { this.news_summary = news_summary; } public String getPic_url() { return pic_url; } public void setPic_url(String pic_url) { this.pic_url = pic_url; } } }