---------------------------------MainActivity-----------------------------------
package com.example.com.tablayoutjson; 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 android.view.View; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private TabLayout tab; String[] strings = {"首页","推荐","什么","魑魅魍魉","灵异","明星","军事","娱乐"}; private String json_url = "http://api.expoon.com/AppNews/getNewsList/type/1/p/"; private ViewPager viewpager; private ArrayList<Fragment> fragments; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tab = findViewById(R.id.tablayout); viewpager = findViewById(R.id.viewpager); tab.setupWithViewPager(viewpager); for (int i = 0; i < strings.length; i++) { tab.addTab(tab.newTab().setText(strings[i])); } fragments = new ArrayList<>(); for (int i = 0; i < strings.length; i++) { MyFragment fragment = new MyFragment(); Bundle bundle = new Bundle(); bundle.putString("title",json_url+(i+1)); fragment.setArguments(bundle); fragments.add(fragment); } viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { return strings[position]; } }); } }-------------------------MyFragment------------------------------------
import android.annotation.SuppressLint; 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 com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.util.ArrayList; import java.util.List; public class MyFragment extends Fragment { private PullToRefreshListView plv; private String title; private List<User.DataBean> plist; @SuppressLint("StaticFieldLeak") @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.myfragment, container, false); plv = view.findViewById(R.id.plv); Bundle bundle = getArguments(); title = bundle.getString("title"); plist = new ArrayList<>(); new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { String getjson = new Utils().getjson(title); return getjson; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); User user = gson.fromJson(s, User.class); plist = user.getData(); MyAdapter adapter = new MyAdapter(getActivity(),plist); plv.setAdapter(adapter); } }.execute(); return view; } }------------------------------------MyAdapter-------------------------------
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; public class MyAdapter extends BaseAdapter { private Context context; private List<User.DataBean> list; public MyAdapter(Context context, List<User.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.plist,null); holder = new viewHolder(); holder.listimg = view.findViewById(R.id.listimg); holder.listname = view.findViewById(R.id.listname); view.setTag(holder); }else{ holder = (viewHolder) view.getTag(); } holder.listname.setText(list.get(i).getNews_summary()); ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder.listimg,MyApp.getoptions()); return view; } public class viewHolder{ private ImageView listimg; private TextView listname; } }-----------------------MyApp----------------------------------------//此类是ImageLoader的一些配置
注:ImageLoader需要依赖库
import android.app.Application; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Environment; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; 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.display.RoundedBitmapDisplayer; import java.io.File; public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration builder = new ImageLoaderConfiguration.Builder(this) .memoryCacheExtraOptions(200,300) .threadPoolSize(5) .memoryCacheSize(2*1024*1024) .diskCacheSize(50*1024*1024) .diskCacheFileCount(100) .diskCache(new UnlimitedDiscCache(new File(Environment.getExternalStorageDirectory()+"xie1223"))) .build(); ImageLoader.getInstance().init(builder); } public static DisplayImageOptions getoptions() { DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnFail(R.mipmap.ic_launcher) .showImageForEmptyUri(R.mipmap.ic_launcher) .cacheInMemory(true) .cacheOnDisk(true) .imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565) .displayer(new RoundedBitmapDisplayer(20)) .build(); return options; } public static DisplayImageOptions getyuan() { DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnFail(R.mipmap.ic_launcher) .showImageForEmptyUri(R.mipmap.ic_launcher) .cacheInMemory(true) .cacheOnDisk(true) .imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565) // .displayer(new CircleBitmapDisplayer(Color.WHITE,3)) .build(); return options; } }---------------------------Utils------------------------------------//工具类
import android.util.Log; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Utils { public String getjson(String json_url){ URL url = null; HttpURLConnection connection = null; String jsonstr = ""; try { url = new URL(json_url); connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); int rescode = connection.getResponseCode(); if (rescode == 200){ InputStream inputStream = connection.getInputStream(); byte[] b = new byte[1024]; int len = -1; while ((len = inputStream.read(b))!=-1){ String s = new String(b,0,len); jsonstr+=s; } Log.d("Main",jsonstr); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return jsonstr; } }----------------------------User-----------------------------//bean类
public class User { 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; } } }-------------------------------activity_main.xml-----------------------------------
<?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:orientation="vertical" android:layout_height="match_parent" tools:context="com.example.com.tablayoutjson.MainActivity"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="scrollable" android:id="@+id/tablayout" /> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/viewpager" /> </LinearLayout>-----------------------------------myfragment.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"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_marginTop="3dp" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/plv"/> </LinearLayout>----------------------------------plist.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"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher" android:id="@+id/listimg" android:layout_margin="10dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:id="@+id/listname" android:layout_toRightOf="@+id/listimg" android:text="哈哈" android:textSize="18sp"/> </RelativeLayout>