实现效果

逻辑代码--MainActivity

package com.example.week4_day4_viewpagerandfragment;import java.util.ArrayList;import java.util.List;import android.graphics.Color;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.View.OnClickListener;import android.widget.LinearLayout;import android.widget.TextView;public class MainActivity extends FragmentActivity {private ViewPager viewPager;// 声明ViewPagerprivate List list;//存放Fragment的list集合// 解析的数据的地址private static final String PATH = "http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=10&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41";private static final String PATH1 = "http://litchiapi.jstv.com/api/GetFeeds?column=1&PageSize=10&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41";private static final String PATH2 = "http://litchiapi.jstv.com/api/GetFeeds?column=3&PageSize=10&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 加载布局viewPager = (ViewPager) findViewById(R.id.viewpager);// 得到ViewPager对象initFragment();// 调用Fragmenttab();// 导航栏// 绑定适配器viewPager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(),list));// 导航栏绑定数据源viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {for (int i = 0; i < list.size(); i++) {tvs[i].setBackgroundColor(Color.BLUE);}tvs[arg0].setBackgroundColor(Color.YELLOW);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}});}public void initFragment() {list = new ArrayList();//新建MyFragment的对象MyFragment fragment1 = new MyFragment(this, PATH);Bundle bundle = new Bundle();bundle.putInt("index", 1);//传值fragment1.setArguments(bundle);MyFragment fragment2 = new MyFragment(this, PATH1);bundle = new Bundle();bundle.putInt("index", 2);fragment2.setArguments(bundle);MyFragment fragment3 = new MyFragment(this, PATH2);bundle = new Bundle();bundle.putInt("index", 3);fragment3.setArguments(bundle);list.add(fragment1);list.add(fragment2);list.add(fragment3);}private TextView[] tvs;//存放导航标题// 导航栏public void tab() {LinearLayout layout = (LinearLayout) findViewById(R.id.linear1);//加载导航布局tvs = new TextView[3];for (int i = 0; i < tvs.length; i++) {tvs[i] = (TextView) layout.getChildAt(i);tvs[i].setTag(i);tvs[i].setBackgroundColor(Color.BLUE);//背景颜色tvs[i].setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {viewPager.setCurrentItem((Integer) v.getTag());}});tvs[0].setBackgroundColor(Color.YELLOW);}}}
Fragment逻辑代码

package com.example.week4_day4_viewpagerandfragment;import java.util.List;import java.util.Map;import com.example.week4_day4_viewpagerandfragment.utils.HttpIntent;import com.example.week4_day4_viewpagerandfragment.utils.ParserJSON;import android.annotation.SuppressLint;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;@SuppressLint({ "NewApi", "ValidFragment" })public class MyFragment extends Fragment {private ListView lv;private Context context;private String path;@SuppressLint("HandlerLeak") Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {@SuppressWarnings("unchecked")List> lists = (List>) msg.obj;lv.setAdapter(new MyAdapter(context, lists));};};@SuppressLint("ValidFragment")public MyFragment(Context context, String path) {super();this.context = context;this.path = path;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {Bundle bundle = getArguments();View view = inflater.inflate(R.layout.item, null);lv = (ListView) view.findViewById(R.id.lv);if (bundle != null) {final int tab = bundle.getInt("index");new Thread(){public void run() {switch (tab) {case 1:String jsonString = HttpIntent.httpIntent(path);List> list = ParserJSON.paserJSON(jsonString);Message msg = Message.obtain();msg.obj = list;handler.sendMessage(msg);break;case 2:String jsonString1 = HttpIntent.httpIntent(path);List> list2 = ParserJSON.paserJSON(jsonString1);Message msg2 = Message.obtain();msg2.obj = list2;handler.sendMessage(msg2);break;case 3:String jsonString2 = HttpIntent.httpIntent(path);List> list3 = ParserJSON.paserJSON(jsonString2);Message msg3 = Message.obtain();msg3.obj = list3;handler.sendMessage(msg3);break;default:break;}};}.start();}return view;}}
Fragment适配器

package com.example.week4_day4_viewpagerandfragment;import java.util.List;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;/** * 自定义FragmentPagerAdapter的适配器 专门存放Fragment数据 *  */public class MyFragmentAdapter extends FragmentPagerAdapter {private List list;public MyFragmentAdapter(FragmentManager fm, List list) {super(fm);this.list = list;}/** * 根据指定下标返回对应的Fragment对象 */@Overridepublic Fragment getItem(int arg0) {return list.get(arg0);}/** * 适配器中Fragment的数量 */@Overridepublic int getCount() {return list.size();}}
网络请求

package com.example.week4_day4_viewpagerandfragment.utils;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class HttpIntent {public static String httpIntent(String path) {ByteArrayOutputStream out = new ByteArrayOutputStream();URL url;try {url = new URL(path);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setConnectTimeout(5000);connection.setDoInput(true);connection.connect();if(connection.getResponseCode()==200){InputStream in = connection.getInputStream();int temp = 0;byte[] buffer = new byte[1024];while ((temp = in.read(buffer)) != -1) {out.write(buffer, 0, temp);out.flush();}return out.toString();}} catch (Exception e) {e.printStackTrace();}return null;}public static byte[] httpIntents(String path) {ByteArrayOutputStream out = new ByteArrayOutputStream();URL url;try {url = new URL(path);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setConnectTimeout(5000);connection.setDoInput(true);connection.connect();if(connection.getResponseCode()==200){InputStream in = connection.getInputStream();int temp = 0;byte[] buffer = new byte[1024];while ((temp = in.read(buffer)) != -1) {out.write(buffer, 0, temp);out.flush();}return out.toByteArray();}} catch (Exception e) {e.printStackTrace();}return null;}}
解析JSON数据

package com.example.week4_day4_viewpagerandfragment.utils;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONObject;public class ParserJSON {public static List> paserJSON(String jsonString){List> list=new ArrayList>();try {JSONObject object=new JSONObject(jsonString);JSONObject object2=object.getJSONObject("paramz");JSONArray array=object2.getJSONArray("feeds");for (int i = 0; i < array.length(); i++) {Map map=new HashMap();JSONObject object3=array.getJSONObject(i);JSONObject object4=object3.getJSONObject("data");String title=object4.getString("subject");String content=object4.getString("summary");String prc=object4.getString("cover");prc="http://litchiapi.jstv.com"+prc;map.put("title", title);map.put("content", content);map.put("prc", prc);list.add(map);}} catch (Exception e) {e.printStackTrace();}return list;}}

图片缓存

package com.example.week4_day4_viewpagerandfragment.utils;import java.util.Map;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.widget.ImageView;public class ImagAsyncTask extends AsyncTask {private Context context;private ImageView iv;private Map imagCache;private String imageUrl = null;public ImagAsyncTask(Context context, ImageView iv,Map imagCache) {this.context = context;this.iv = iv;this.imagCache = imagCache;}@Overrideprotected Bitmap doInBackground(String... params) {// TODO Auto-generated method stubimageUrl = params[0];byte[] buffer = HttpIntent.httpIntents(imageUrl);Bitmap bp = null;if (buffer != null && buffer.length > 0) {bp = BitmapFactory.decodeByteArray(buffer, 0, buffer.length);}return bp;}@Overrideprotected void onPostExecute(Bitmap result) {// TODO Auto-generated method stubsuper.onPostExecute(result);imagCache.put(imageUrl, result);// 将图片根据 图片地址缓存if (imageUrl.equals(iv.getTag())) {iv.setImageBitmap(result);}}}
ListView适配器

package com.example.week4_day4_viewpagerandfragment;import java.util.HashMap;import java.util.List;import java.util.Map;import com.example.week4_day4_viewpagerandfragment.utils.ImagAsyncTask;import android.content.Context;import android.graphics.Bitmap;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class MyAdapter extends BaseAdapter {private Context context;private List> list;private Map imaMap = new HashMap();public MyAdapter(Context context, List> list) {super();this.context = context;this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = LayoutInflater.from(context).inflate(R.layout.myadapter,null);TextView tv1 = (TextView) view.findViewById(R.id.title);TextView tv2 = (TextView) view.findViewById(R.id.context);ImageView iv = (ImageView) view.findViewById(R.id.image);String title = list.get(position).get("title").toString().trim();String content = list.get(position).get("content").toString().trim();String imagUrl = list.get(position).get("prc").toString().trim();iv.setImageResource(R.drawable.ic_launcher);tv1.setText(title);tv2.setText(content);iv.setTag(imagUrl);if (!imaMap.containsKey(imagUrl)) {ImagAsyncTask task=new ImagAsyncTask(context, iv, imaMap);task.execute(imagUrl);}else{iv.setImageBitmap(imaMap.get(imagUrl));}return view;}}
布局文件--main

                                    
布局文件--ListView中的item

<?xml version="1.0" encoding="utf-8"?>    
布局文件--ListView

<?xml version="1.0" encoding="utf-8"?>    
配置文件--添加网络权限

<?xml version="1.0" encoding="utf-8"?>                                                                                        



更多相关文章

  1. Android Layout Tricks #3: Optimize by merging(Android 布局技
  2. Android适配器之------BaseAdapter(例子)
  3. android一种较为复杂的布局参考(xml文件)
  4. android使用同一个RecyclerView实现两种不同Item布局
  5. Android 中的 Looper 对象
  6. Android Studio [相对布局RelativeLayout]
  7. [中英文对照]android Designing for TV(一) ------ Optimizing L
  8. Android LinearLayout和FrameLayout 登陆布局1
  9. Android——实现在纯Java代码里写布局

随机推荐

  1. 撩下Cookie和Session
  2. 在聊Java中的equals方法
  3. ArrayList和LinkedList的区别?
  4. volatile与synchronized的区别
  5. 五分钟看懂一致性哈希算法
  6. Java原子类实现原理分析
  7. 聊下JVM内存模型
  8. JVM垃圾回收机制
  9. 三分钟秒懂BIO/NIO/AIO区别?
  10. 你在 Python 中常常写的 with..as.. 到底