练手小项目之新闻类(3)添加广告栏

 上一节讲到将TTFragment依附activity上面 那现在看看Fragment的里面的内容 


1.首先我需要一个Listview 展示数据,正好Fragment 里面有个内置的Listview的Fragment   ListFragment 为了熟悉Fragment里面怎么使用 我们先看看生命周期

第一个 attach方法  先依附在activity的内存空间

Oncreate 方法创立Fragment 在Fragment里面要使用的数据,现在这里初始化好===onActivityCreated

OncreateView  创立布局,在这里讲布局初始化好,可以在这里初始化空间

后面使用到其他生命周期我们在讲


SO,我们现在onActivityCreated 里面进行联网操作 并进行json解析

    "paramz": {
        "links": [],
        "matches": [],
        "tops": [
            {
                "category": "advert",
                "id": 7006,
                "oid": 22,
                "photo": "/Attachs/Top/7006/a5e706a8e2f84d2da4346fd416214902.jpg",
                "subject": "《明星到我家》婆媳乌龙大猜想"
            },
            {
                "category": "map",
                "id": 7007,
                "oid": 4264,
                "photo": "/Attachs/Top/7007/35d89871ca574af18af54948ce75f0ec.jpg",
                "subject": "济南一小区现马桶家禽等"占车位神器""
            },
            {
                "category": "map",
                "id": 7002,
                "oid": 4262,
                "photo": "/Attachs/Top/7002/5d7f3805d54d4da6a37355a1b084e5dc.jpg",
                "subject": "山东聊城被扎针女婴出院回家"
            },
            {
                "category": "map",
                "id": 6999,
                "oid": 4254,
                "photo": "/Attachs/Top/6999/e219606ff96147ce90310f1bb89bd13b.jpg",
                "subject": "温州市区“卖萌”消防栓引市民围观"
            },
            {
                "category": "advert",
                "id": 6871,
                "oid": 23,
                "photo": "/Attachs/Top/6871/0388422c5adb4792b3a010115125b923.jpg",
                "subject": "活动:全民付点亮生活"
            }
        ]
    },
    "status": "ok"
}

json 结构图  如果没有这个工具 可以看 我昨天写的文章

作为安卓开发者必备的小软件(全是干货)

最外层是 {} 用jsonObject 

JSONObject jsonObject = JSONObject
                                .parseObject(response);

2.通过getString 可以得到 特征码 和paramz  然后继续解析当然你要先解析特征码 看是不是 成功

String status = jsonObject.getString("status");

if ("ok".equals(status))

3.然后解析paramz   因为还是{} 所以还是用jsonobject

    JSONObject jsonObject2 = jsonObject
                                    .getJSONObject("paramz");

4.然后里面的tops是我们想要的 

通过getString 获得tops里面的内容

String tops = jsonObject2.getString("tops");

5.然后根据tops里面的内容 写实体类

我FastJson也是第一次用 先把所有属性写出来吧 然后把tosTRing 方法写出来 构造 和空构造  

package com.example.android20_lzhxw.beans;
/**
 * 导航上面的数据的实体类
 * 要展示出去:图片photo(url)、subject
 * @author cj
 *
 */
public class TopPagerInfo {
	private String id,oid,category,photo,subject;
	
	

	public TopPagerInfo() {
		super();
	}

	public TopPagerInfo(String id, String oid, String category, String photo,
			String subject) {
		super();
		this.id = id;
		this.oid = oid;
		this.category = category;
		this.photo = photo;
		this.subject = subject;
	}

	@Override
	public String toString() {
		return "TopPager [id=" + id + ", oid=" + oid + ", category=" + category
				+ ", photo=" + photo + ", subject=" + subject + "]";
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getOid() {
		return oid;
	}

	public void setOid(String oid) {
		this.oid = oid;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public String getPhoto() {
		return photo;
	}

	public void setPhoto(String photo) {
		this.photo = photo;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}
	
}

Fastjson就这里方便 你只要写出实体类,和json  就能帮你解析成集合数据 

List<TopPagerInfo> list = JSONArray.parseArray(
                                    tops, TopPagerInfo.class);


// 填充在ViewPager的item中
                            List<View> views = new ArrayList<View>();
                            for (int i = 0; i < list.size(); i++) {
                                TopPagerInfo topPagerInfo = list.get(i);
                                View view = View.inflate(getActivity(),
                                        R.layout.item_pager, null);
                                ImageView imgv = (ImageView) view
                                        .findViewById(R.id.imgv_pagerItem);
                                imgv.setImageResource(R.drawable.ic_launcher);
                                ImageLoader.loadImg(AppURLFinal.URL_IMGBASE
                                        + topPagerInfo.getPhoto(), imgv,
                                        getActivity());
                                TextView txtv = (TextView) view
                                        .findViewById(R.id.txtv_pagerItem);
                                txtv.setText(topPagerInfo.getSubject());
                                views.add(view);
                            }

然后将数据填充到广告栏里面去 其中数据源就是 上面的 集合 views 

广告栏的布局  可以看到上面是一个自定义viewpage 下面是一个页码

<?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="100dp">

    <com.example.android20_lzhxw.mviews.TopViewPager
        android:id="@+id/pager_header"
        android:layout_width="fill_parent"
        android:layout_height="100dp" >
    </com.example.android20_lzhxw.mviews.TopViewPager>

    <TextView
        android:id="@+id/txtv_header"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:background="#ff0000"
        android:padding="5dp"
        android:textColor="#ffffff"
        android:layout_alignBottom="@+id/pager_header"/>

</RelativeLayout>
自定义viewpage 里面 加了一个事件处理机制
package com.example.android20_lzhxw.mviews;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class TopViewPager extends ViewPager{
	public TopViewPager(Context context) {
		super(context);
	}
	public TopViewPager(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		getParent().requestDisallowInterceptTouchEvent(true);
		return super.dispatchTouchEvent(ev);
	}

}


View header = View.inflate(getActivity(),
                                    R.layout.header, null);

TopPagerAdapter pagerAdapter = new TopPagerAdapter(
                                    views);
                            pager.setAdapter(pagerAdapter);

PagerAdapter有四个方法

1getCount()总共有几个view

2.instantiateItem()初始化position处的item

3.destroyItem 销毁条目上的信息

4.isViewFromObject

功能:该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)

package com.example.android20_lzhxw.adapters;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

import com.example.android20_lzhxw.beans.TopPagerInfo;

public class TopPagerAdapter extends PagerAdapter {
	private List<View> views;

	public TopPagerAdapter(List<View> views) {
		super();
		this.views = views;
	}
	
	@Override
	public int getCount() {
		return views == null ? 0 : views.size();
	}
	
	@Override
	public Object instantiateItem(ViewGroup container, int position) {
		container.addView(views.get(position));
		return views.get(position);
	}

	@Override
	public void destroyItem(ViewGroup container, int position, Object object) {
		container.removeView(views.get(position));
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0==arg1;
	}

}
然后设置页面 在不懂的时候显示当前页码和 滑动的时候设置页面信息

//textView的显示内容,标示Pager页码
                            final TextView txv_page=(TextView) header.findViewById(R.id.txtv_header);
                            final int size=views.size();
                            txv_page.setText("1/"+size);
                            pager.setOnPageChangeListener(new OnPageChangeListener() {
                                
                                @Override
                                public void onPageSelected(int arg0) {
                                    txv_page.setText(arg0+1+"/"+size);
                                }
                                
                                @Override
                                public void onPageScrolled(int arg0, float arg1, int arg2) {
                                    
                                }
                                
                                @Override
                                public void onPageScrollStateChanged(int arg0) {
                                    
                                }
                            });

因为listFragment 内置了一个listview 所以 先要获取到

// 获取ListFragment的ListVIew
                            ListView listView = getListView();

然后将 Viewpage 设置到listview 头部

    // 添加头部视图的时候,必须在setAdapter之前。
                            listView.addHeaderView(header);

下一节讲解填充listview的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值