package com.zhong.fragment;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.LayoutParams;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.zhong.activity.R;
import com.zhong.config.MyConfig;
import com.zhong.fragment.base.BaseListFragment;
import com.zhong.helper.JsonHelper;
import com.zhong.helper.MyHttpClientHelper;
import com.zhong.widget.MyViewPager;
/**
* 主页面的fragment内容展示
*
* @author 仲丛旭
*
*/
@SuppressLint("ValidFragment")
public class ContentFragment extends BaseListFragment implements
View.OnClickListener {
private final String TAG = "ContentFragment";
private List<Map<String, Object>> list;
/** listView适配器 */
protected ContentBaseadapter mAdapter;
private String urlStr;
/** 全局变量之图片缓存map */
protected Map<String, Bitmap> cacheImageMap;
/** 更新页数 */
private int page = 1;
/** fragment标识 */
private int fragmentIndex;
// ======================以下是只有第一页才会出现的广告页
/** 单选按钮组,那些小点 */
private RadioGroup radioGroup_fragment;
/** 第一页需要展示的广告 */
private MyViewPager viewPager_fragment;
/** 存放viewPager的list */
private List<ImageView> viewList;
/** viewpager的适配器 */
private MyAdvertisementAdapter myAdvertisementAdapter;
/** 广告上的父控件,为了确定大小而获取 */
private RelativeLayout relative_fragment_content;
/** 接收listview解析返回的数据 */
private List<Map<String, Object>> jsonList;
/** 轮播图片字符串title数组 */
private String[] titleArr = new String[3];
/** 轮播广告上的文字 */
private TextView textView_fragment_content_titleName;
public ContentFragment() {
fragmentIndex = 1;
}
/**
* 在Activity中创建fragment的构造方法
*
* @param urlStr
* 第一次请求网址
* @param list
* 集合
* @param cacheImageMap
* 缓存的图片
*/
public ContentFragment(String urlStr, List<Map<String, Object>> list,
Map<String, Bitmap> cacheImageMap) {
this.list = list;
this.urlStr = urlStr;
this.cacheImageMap = cacheImageMap;
if (urlStr.equals(MyConfig.JSON_LIST_DATA_0)) {
fragmentIndex = 1;
} else {
fragmentIndex = 0;
}
}
/**
* 于用获取数据
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (list == null) {
list = new ArrayList<Map<String, Object>>();
}
mAdapter = new ContentBaseadapter(getActivity(), list);
}
/**
* 用于创建布局
*
* 初始化布局:
*
* 得到listView控件
*
* 设置listView属性
*
* 设置listView监听
*
* 创建listview中Adapter
*
* 为Adapter追加数据源
*
* 把adapter与listview控件绑定
*
* 设置listView监听
*
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
if (urlStr.equals("")) {
/* 如果是第六页,那么不显示listView加载 */
listview.setPullLoadEnable(false);
}
/* 父控件 */
relative_fragment_content = (RelativeLayout) view
.findViewById(R.id.relative_fragment_content);
textView_fragment_content_titleName = (TextView) view
.findViewById(R.id.textView_fragment_content_titleName);
if (fragmentIndex == 1) {// 1:是第一页,0:表示其它页
/* 开始加载轮播广告数据 */
new MyTask(0).execute(MyConfig.JSON_URL);
relative_fragment_content
.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, getButtonViewPager()));
/* 得到viewPager对象,并设置其子页面 */
viewPager_fragment = (MyViewPager) view
.findViewById(R.id.viewPager_fragment);
/* 重置高度 */
// viewPager_fragment.setLayoutParams(new LinearLayout.LayoutParams(
// LayoutParams.MATCH_PARENT, getButtonViewPager()));
viewList = new ArrayList<ImageView>();
for (int i = 0; i < 3; i++) {
ImageView imageView = new ImageView(getActivity());
imageView.setImageResource(R.drawable.ic_launcher);
imageView.setOnClickListener(this);
viewList.add(imageView);
}
myAdvertisementAdapter = new MyAdvertisementAdapter(viewList);
viewPager_fragment.setAdapter(new MyAdvertisementAdapter(viewList));
/* 页面滑动时的监听 */
viewPager_fragment
.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
radioGroup_fragment.getChildAt(arg0).performClick();
}
@Override
public void onPageScrolled(int arg0, float arg1,
int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
/* 创建若干单选按钮,被把按钮放到组里 */
radioGroup_fragment = (RadioGroup) view
.findViewById(R.id.radioGroup_fragment);
for (int i = 0; i < radioGroup_fragment.getChildCount(); i++) {
// RadioButton rButton =new RadioButton(getActivity());// 创建单选按钮
RadioButton rButton = (RadioButton) radioGroup_fragment
.getChildAt(i);
rButton.setTag(i);// 设置tag的下标与滑动界面的下标保持一至
// rButton.setLayoutParams(new LinearLayout.LayoutParams(15,
// 15));// 设置点的宽高
rButton.setBackgroundResource(R.drawable.slide_image_dot_c2);//
// 背景状态设置
rButton.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));// 去掉单选按钮前面的点颜色为空
// radioGroup_fragment.addView(rButton);
}
/* 单选按钮组被选中的监听 */
radioGroup_fragment
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group,
int checkedId) {
// Log.i(TAG, "==得到按钮,并改变当前按钮显示的颜色");
RadioButton rButton = (RadioButton) group
.findViewById(checkedId);
// Log.i(TAG, "==得到相应的tag值(tag值就是下标)");
int index = (Integer) (rButton.getTag());
// Log.i(TAG, "拿出按钮中的tag值,就是下标 index==" + index);
viewPager_fragment.setCurrentItem(index);
// 改变当前显示的文字
textView_fragment_content_titleName
.setText(titleArr[index]);
}
});
radioGroup_fragment.getChildAt(0).performClick();// 默认设置第一个页面是单击状态
} else {
relative_fragment_content.setVisibility(View.GONE);
}
Log.i(TAG, "==onCreateView(),listview-->" + listview);
listview.setXListViewListener(this);// 设置监听由这个类完成
listview.setAdapter(mAdapter);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i(TAG, "==onItemClick(),position=" + position + ",id=" + id);
Log.i(TAG, "==自定义adapter中的每一项,把这数据弄下来");
String idStr = list.get((int) id).get("id").toString();
goContentActivity(idStr);
}
});
return view;
}
/**
* 实现左右滑动广告Adapter
*
* @author 仲丛旭
*
*/
class MyAdvertisementAdapter extends PagerAdapter {
private List<ImageView> list = null;
public MyAdvertisementAdapter(List<ImageView> list) {
this.list = list;
}
@Override
public int getCount() {
if (list != null) {
return list.size();
}
return 0;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));// 每一个item实例化对象
return list.get(position);
}
}
/**
* 根据手机尺寸获得ViewPager高度
*
* @param i
*/
private int getButtonViewPager() {
Display display = getActivity().getWindowManager().getDefaultDisplay(); // Activity#getWindowManager()
int lenButton = 0;
lenButton = display.getWidth() * 1 / 2;
return lenButton;
}
/**
* fragment中listview适配器
*
* @author 仲丛旭
*
*/
class ContentBaseadapter extends BaseAdapter {
private Context context;
private List<Map<String, Object>> list;
public ContentBaseadapter(Context context,
List<Map<String, Object>> list) {
this.context = context;
this.list = list;
}
public void addList(List<Map<String, Object>> list) {
this.list.addAll(list);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mhHolder;
if (convertView == null) {
mhHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.item_listview, null);
mhHolder.title = (TextView) convertView
.findViewById(R.id.title);
mhHolder.source = (TextView) convertView
.findViewById(R.id.source);
mhHolder.nickname = (TextView) convertView
.findViewById(R.id.nickname);
mhHolder.create_time = (TextView) convertView
.findViewById(R.id.create_time);
mhHolder.wap_thumb = (ImageView) convertView
.findViewById(R.id.wap_thumb);
convertView.setTag(mhHolder);
} else {
mhHolder = (ViewHolder) convertView.getTag();
}
String title = (String) list.get(position).get("title");
String source = (String) list.get(position).get("source");
String create_time = (String) list.get(position).get("create_time");
String nickname = (String) list.get(position).get("nickname");
String wap_thumb = list.get(position).get("wap_thumb").toString();
mhHolder.title.setText(title);
mhHolder.source.setText(source);
mhHolder.create_time.setText(create_time);
mhHolder.nickname.setText(nickname);
// mhHolder.wap_thumb.setImageResource(R.drawable.ic_launcher);
/* 判断要不要给图片留位置 */
if (wap_thumb == null || wap_thumb.equals("")) {
mhHolder.wap_thumb.setVisibility(View.GONE);
} else {
mhHolder.wap_thumb.setVisibility(View.INVISIBLE);
}
if (cacheImageMap.get(wap_thumb) == null) {
/* 不存在开始请求网络,并设置图片 */
new MyTask(mhHolder.wap_thumb, wap_thumb, 1).execute(wap_thumb);
} else {
mhHolder.wap_thumb.setImageBitmap(cacheImageMap.get(wap_thumb));
mhHolder.wap_thumb.setVisibility(View.VISIBLE);
}
return convertView;
}
class ViewHolder {
private TextView title;
private TextView source;
private TextView nickname;
private TextView create_time;
private ImageView wap_thumb;
}
}
/** 异步任务,访问网络获取图片,并设置 */
class MyTask extends AsyncTask<String, Integer, Object> {
/** 作为缓存下来的图片网址字符串 */
private String urlStr;
/** 显示图片的控件 */
private ImageView image;
/** 操作标记:0加载listview小图片,1:加载页数据 */
private int flag;
public MyTask(ImageView image, String urlStr, int flag) {
this.urlStr = urlStr;
this.image = image;
this.flag = flag;
}
public MyTask(int flag) {
this.flag = flag;
}
@Override
protected Object doInBackground(String... params) {
Object obj = null;
byte[] bitmapByte = MyHttpClientHelper.loadByteFromURL(params[0]);
switch (flag) {
case 0:
Log.i(TAG, "==轮播图片josn中各种地址解析");
jsonTolist(bitmapByte,
new String[] { "image_s", "id", "title" }, "data", flag);
break;
case 1:
obj = bitmapByte;
break;
case 2:
String jsonString = MyHttpClientHelper.loadTextFromURL(
params[0], "UTF-8");// 网络访问得到数据
List<Map<String, Object>> list = JsonHelper.jsonStringToList(
jsonString, new String[] { "title", "source",
"nickname", "create_time", "wap_thumb", "id" },
"data");
obj = list;
break;
default:
obj = bitmapByte;
break;
}
return obj;
}
@Override
protected void onPostExecute(Object obj) {
super.onPostExecute(obj);
if (obj == null) {
return;
}
switch (flag) {
case 1:
byte[] result = (byte[]) obj;
Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0,
result.length);
image.setImageBitmap(bitmap);
image.setVisibility(View.VISIBLE);
cacheImageMap.put(urlStr, bitmap);
break;
case 2:
List<Map<String, Object>> list = (List<Map<String, Object>>) obj;
mAdapter.addList(list);
mAdapter.notifyDataSetChanged();
if (list.size() == 0) {
/* 确定本次请求没有数据了,那么listView不可以上拉加载了 */
listview.setPullLoadEnable(false);
}
break;
case 3:
Log.i(TAG, "==每个输播图片的数据加载");
getBitmap(urlStr, (byte[]) obj, 0);
break;
case 4:
Log.i(TAG, "==每个输播图片的数据加载");
getBitmap(urlStr, (byte[]) obj, 1);
break;
case 5:
Log.i(TAG, "==每个输播图片的数据加载");
getBitmap(urlStr, (byte[]) obj, 2);
break;
default:
break;
}
}
}
/**
* 获取字节数组,转成bitmap图片显示
*
* @param urlStr
* @param result
* @param i
* @return
*/
public Bitmap getBitmap(String urlStr, byte[] result, int i) {
Bitmap bitmap = BitmapFactory.decodeByteArray(result, 0, result.length);
ImageView imageView = (ImageView) viewList.get(i);
imageView.setImageBitmap(bitmap);
cacheImageMap.put(urlStr, bitmap);
myAdvertisementAdapter.notifyDataSetChanged();
radioGroup_fragment.getChildAt(0).performClick();
// 改变当前显示的文字也为第一页
textView_fragment_content_titleName.setText(titleArr[0]);
return bitmap;
}
/**
* JSON解析数据方法
*
* @param result
* @param jsonStrings
* @param string
* @param flag
* @return
*/
public void jsonTolist(byte[] result, String[] jsonStrings, String string,
int flag) {
String str = "";
String urlStr = null;
try {
str = new String(result, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
jsonList = JsonHelper.jsonStringToList(str, jsonStrings, string);
Log.i(TAG, "jsonList==" + jsonList);
for (int i = 0; i < jsonList.size(); i++) {
urlStr = jsonList.get(i).get("image_s").toString();
String id = jsonList.get(i).get("id").toString();
String title = jsonList.get(i).get("title").toString();
titleArr[i] = title;
Log.i(TAG, "urlStr==" + urlStr);
ImageView imageView = (ImageView) viewList.get(i);
imageView.setTag(id);
if (cacheImageMap.get(urlStr) == null) {
new MyTask(3 + i).execute(urlStr);// 加载每一张图片
} else {
imageView.setImageBitmap(cacheImageMap.get(urlStr));
myAdvertisementAdapter.notifyDataSetChanged();
}
}
}
/**
* ListView刷新
*/
@Override
public void onRefresh() {
}
/**
* ListView加载
*/
@Override
public void onLoadMore() {
new MyTask(2).execute(urlStr + "&page=" + ++page);
}
/**
* 广告三张图片的单击监听
*/
@Override
public void onClick(View v) {
Log.i(TAG, "v.getId()==" + v.getId());
goContentActivity(v.getTag().toString());
}
}