package com.michael.doubanonline;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.alibaba.fastjson.JSON;
import com.michael.doubanonline.OnlineDetailAdapter.OnPictureClick;
import com.michael.doubanonline.base.ShareActionBarActivity;
import com.michael.doubanonline.bean.Photo;
import com.michael.doubanonline.bean.PhotoList;
import com.michael.doubanonline.component.PullToRefreshListViewWithFooter;
import com.michael.doubanonline.component.PullToRefreshListViewWithFooter.OnFooterListViewLastItemVisibleListener;
import com.michael.doubanonline.component.PullToRefreshListViewWithFooter.OnFooterListViewRefreshListener;
import com.michael.doubanonline.dialog.DialogUtil;
import com.michael.doubanonline.http.InterfaceLib;
import com.michael.doubanonline.http.RequestTask;
import com.michael.doubanonline.http.RequestTask.OnTaskResultListener;
import com.michael.doubanonline.util.ToastUtil;
/**
* 从主界面跳转进来的线上活动详细界面
*
* */
public class OnlineDetailActivity extends ShareActionBarActivity implements ActionBar.OnNavigationListener
{
/** 接收传递进来的线上活动的ID,ID为String类型 */
public static final String INTENT_KEY_ID = "INTENT_KEY_ID";
/** 接收传递进来的线上活动的标题 */
public static final String INTENT_KEY_TITLE = "INTENT_KEY_TITLE";
/** 接收传递进来的线上活动的内容简介 */
public static final String INTENT_KEY_DETAIL = "INTENT_KEY_DETAIL";
/** 具有下来刷新和显示更多功能的ListView */
private PullToRefreshListViewWithFooter lvImages;
/** 数据源适配器 */
private OnlineDetailAdapter adapter;
/** 存放照片数据源的ArrayList */
private ArrayList<Photo> dataList;
/** 当前线上活动的id */
public static String id;
/** 所有图片的数量 */
private int totalPhotoCount;
/** 分类 */
private String sortBy;
/** 每页请求的数据 */
public static int PAGE_SIZE = 40;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
setActionBar();
iniComponent();
iniListViewHeader();
iniListener();
lvImages.setAdapter(adapter);
id = this.getIntent().getStringExtra(INTENT_KEY_ID);
}
private void iniComponent()
{
sortBy = InterfaceLib.GetPhotos.SORT_BY_TIME;// 默认按时间排序
lvImages = (PullToRefreshListViewWithFooter) findViewById(R.id.lvList);
dataList = new ArrayList<Photo>();
adapter = new OnlineDetailAdapter(this, dataList);
adapter.setOnPictureClick(new OnPictureClick()
{
@Override
public void onClick(int position)
{
Intent intent = new Intent(OnlineDetailActivity.this, PhotoDetailActivity.class);
intent.putExtra(PhotoDetailActivity.INTENT_KEY_TOTAL, totalPhotoCount);
intent.putExtra(PhotoDetailActivity.INTENT_KEY_PHOTO_POSITION, position);
intent.putExtra(PhotoDetailActivity.INTENT_KEY_ID, OnlineDetailActivity.id);
intent.putExtra(PhotoDetailActivity.INTENT_KEY_DATA_LIST, dataList);
intent.putExtra(PhotoDetailActivity.INTENT_KEY_SORT_BY, sortBy);
startActivity(intent);
}
});
}
private void iniListener()
{
// 下拉刷新
lvImages.setOnFooterListViewRefreshListener(new OnFooterListViewRefreshListener()
{
@Override
public void onFooterListViewRefresh()
{
requestData(true);
}
});
// 显示更多
lvImages.setOnFooterListViewLastItemVisibleListener(new OnFooterListViewLastItemVisibleListener()
{
@Override
public void onFooterListViewLastItemVisible()
{
if (dataList.size() == totalPhotoCount)
{
lvImages.setListViewFooterContent(PullToRefreshListViewWithFooter.LOADING_STATE_DONE, "全部加载完毕了哦~");
} else
{
requestData(false);
}
}
});
}
/**
* 设置头部
*
* */
private void setActionBar()
{
ActionBar actionBar = getSupportActionBar();
Context context = actionBar.getThemedContext();
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(context, R.array.detail_titles, R.layout.sherlock_spinner_item);
list.setDropDownViewResource(R.layout.list_action_bar_item);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(list, this);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME);
actionBar.setIcon(this.getResources().getDrawable(R.drawable.ic_launcher));
actionBar.setDisplayHomeAsUpEnabled(true);// 让icon可以点击,并在icon的右边加上一个<箭头在onMenuItemSelected方法中被监听
actionBar.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.action_bar_bg));
actionBar.setDisplayShowCustomEnabled(true);
// 小菊花:)
// LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// View view = layoutInflater.inflate(R.layout.layout_actionbar_progressbar, null);
// actionBar.setCustomView(view, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER));
}
/**
* 将Json解析为Bean
* */
private PhotoList resolveJsonToBean(String jsonString)
{
return JSON.parseObject(jsonString, PhotoList.class);
}
@Override
public void onDestroy()
{
super.onDestroy();
if(requestPhotoList != null)
{
requestPhotoList.cancelRequest();
}
}
private RequestTask requestPhotoList;
/**
* 获取数据
*
* */
private void requestData(final boolean isClear)
{
requestPhotoList = new RequestTask(this, "获取图片列表");
requestPhotoList.setOnTaskResultListener2(new OnTaskResultListener()
{
@Override
public void onStart()
{
setRefreshState(true);
lvImages.setListViewFooterContent(PullToRefreshListViewWithFooter.LOADING_STATE_LOADING);
}
@Override
public void onSuccess(String jsonResponse)
{
if (jsonResponse != null)
{
PhotoList photos = resolveJsonToBean(jsonResponse);
if (photos != null)
{
totalPhotoCount = Integer.parseInt(photos.getTotal());
updateListView(photos, isClear);
} else
{
ToastUtil.show("数据解析失败");
}
} else
{
ToastUtil.show("获取数据为空");
}
lvImages.setListViewFooterContent(PullToRefreshListViewWithFooter.LOADING_STATE_DONE);
}
@Override
public void onFail(String message)
{
lvImages.setListViewFooterContent(PullToRefreshListViewWithFooter.LOADING_STATE_FAIL);
}
@Override
public void onFinish()
{
lvImages.onRefreshComplete();
setRefreshState(false);
}
});
HashMap<String, String> map = new HashMap<String, String>();
map.put(InterfaceLib.GetPhotos.start, getStart(isClear) + "");
map.put(InterfaceLib.GetPhotos.count, PAGE_SIZE + "");
map.put(InterfaceLib.GetPhotos.sortby, sortBy);
requestPhotoList.request("online/" + id + "/" + InterfaceLib.GetPhotos.apiActionName, map);
}
/**
* 更新ListView
*
* @param onlines
* 数据源
* @param isClear
* 是否清空旧数据
*/
private void updateListView(PhotoList photoList, boolean isClear)
{
if (isClear)
{
dataList.clear();
}
dataList.addAll(photoList.getPhotos());
adapter.notifyDataSetChanged();
lvImages.setFooterViewVisibility(View.VISIBLE);
}
/**
* 获取当前需要从哪一个开始下载
* */
private int getStart(boolean isClear)
{
if (dataList == null || dataList.size() == 0 || isClear)
{
return 0;
}
return dataList.size();
}
/**
* 初始化ListView的Header
* */
private void iniListViewHeader()
{
LayoutInflater layoutInflater = this.getLayoutInflater();
View headerView = (View) layoutInflater.inflate(R.layout.list_header_detail, lvImages.getRefreshableView(), false);
TextView tvTitle = (TextView) headerView.findViewById(R.id.tv_title);
TextView tvDetail = (TextView) headerView.findViewById(R.id.tv_detail);
tvTitle.setClickable(true);
RelativeLayout rlDetail = (RelativeLayout) headerView.findViewById(R.id.rl_detail);
rlDetail.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
showDescDialog();
}
});
tvTitle.setText(this.getIntent().getStringExtra(INTENT_KEY_TITLE));
tvDetail.setText(this.getIntent().getStringExtra(INTENT_KEY_DETAIL));
lvImages.getRefreshableView().addHeaderView(headerView);
}
/**
* 处理导航项的点击事件 默认就会进行调用
*
* */
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId)
{
switch (itemPosition)
{
case 0:// 按时间排序
sortBy = InterfaceLib.GetPhotos.SORT_BY_TIME;
requestData(true);
break;
case 1:// 按热度排序
sortBy = InterfaceLib.GetPhotos.SORT_BY_VOTE;
requestData(true);
break;
case 2:// 按评论排序
sortBy = InterfaceLib.GetPhotos.SORT_BY_COMMENT;
requestData(true);
break;
default:
break;
}
return true;
}
/**
* 根据Intent传递进来的title和detail内容显示对话框
* */
private void showDescDialog()
{
Intent intent = getIntent();
String title = intent.getStringExtra(INTENT_KEY_TITLE);
String message = intent.getStringExtra(INTENT_KEY_DETAIL);
DialogUtil.show(this, title, message);
}
}