package coolbuy360.searchhealth;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import coolbuy360.adapter.NewListAdapter;
import coolbuy360.dbhelper.DBnewshelper;
import coolbuy360.logic.Article;
import coolbuy360.pulltorefresh.PullToRefreshBase;
import coolbuy360.pulltorefresh.PullToRefreshListView;
import coolbuy360.pulltorefresh.PullToRefreshBase.Mode;
import coolbuy360.pulltorefresh.PullToRefreshBase.OnRefreshListener2;
import coolbuy360.service.CommandResult;
import coolbuy360.service.DisplayParams;
import coolbuy360.service.Util;
import android.R.integer;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
@SuppressLint("ValidFragment")
public class NewsSubTest extends BaseFragment {
public static final int HTTP_REQUEST_SUCCESS = -1;
public static final int HTTP_REQUEST_ERROR = 0;
public static final int VIEWVISIBLE = 0;
public static final int VIEWGONE = 1;
public View view;
public View headerView;
private NewListAdapter subNewAdapter = null;
private Map<Integer, Integer> postionMap = new HashMap<Integer, Integer>();
private PullToRefreshListView refreshListView;
public Context mContext;
String articleType;
String parentID;
Boolean isCompleted = false;
public static final int NO_LOADED = 0;
public static final int LOADING = 1;
public static final int LOADED = 2;
public static final int LOADERROR = 3;
public static NewsSubTest newsSubTest;
public int Postion;
public String errorMessageString;
public boolean isError;
// LinearLayout async_begin;
LinearLayout async_error;
View listview_empty_error;
View LoadingView;
public NewsSubTest(Context context, String articltype, String parentid,
int postion) {
mContext = context;
articleType = articltype;
parentID = parentid;
Postion = postion;
postionMap.put(postion, NO_LOADED);
}
public NewsSubTest(Context context, String articltype, String parentid) {
mContext = context;
articleType = articltype;
parentID = parentid;
postionMap.put(Integer.parseInt(parentID) - 1, NO_LOADED);
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO �Զ����ɵķ������
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.basefragment_listview, null);
refreshListView = (PullToRefreshListView) view
.findViewById(R.id.ptrlvSubNews);
/*
* ImageView imgview=new ImageView(mContext); Bitmap bitmap =
* BitmapFactory.decodeResource( mContext.getResources(),
* R.drawable.about_logo_img); Bitmap resizedBitmap =
* Bitmap.createScaledBitmap(bitmap , 160, 65, true);
* imgview.setImageDrawable(new BitmapDrawable(resizedBitmap));
*/
async_error = (LinearLayout) view.findViewById(R.id.async_error);
LayoutInflater layoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listview_empty_error = layoutInflater.inflate(
R.layout.listview_emptyview_error, null);
LayoutInflater minflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LoadingView = minflater.inflate(
R.layout.listview_emptyview_loading, null);
refreshListView.setEmptyView(LoadingView);
initPullToRefreshListView(refreshListView, subNewAdapter);
return view;
}
/*
* ���� Javadoc��
*
* @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle)
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO �Զ����ɵķ������
super.onActivityCreated(savedInstanceState);
if (postionMap.get(Postion) == NO_LOADED) {
postionMap.put(Postion, LOADING);
new GetNewsTaskFrist(articleType, parentID, News.PageSize)
.execute();
}
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
}
/**
* ��ʼ��PullToRefreshListView<br>
* ��ʼ����PullToRefreshListView�е�ViewPager�����
*
* @param rtflv
* @param adapter
*/
public void initPullToRefreshListView(PullToRefreshListView rtflv,
NewListAdapter adapter) {
rtflv.setOnRefreshListener(new MyOnRefreshListener(rtflv));
rtflv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View View,
int position, long arg3) {
Map<String, String> maplist = (Map<String, String>) parent
.getItemAtPosition(position);
TextView titleTextView = (TextView) View
.findViewById(R.id.tvTitle);
titleTextView.setTextColor(getResources().getColor(
R.color.news_item_content));
startDetailActivity(getActivity(), maplist.get("ArticleID"),
maplist.get("Title"), articleType,
maplist.get("UpdateTime"));
}
});
if (subNewAdapter != null) {
if (headerView != null) {
rtflv.getRefreshableView().addHeaderView(headerView, null,
false);
}
rtflv.setMode(Mode.BOTH);
rtflv.setAdapter(subNewAdapter);
}
if(postionMap.get(Postion) ==LOADERROR)
{
ListViewEmptyError(errorMessageString,
new refreshOnclick());
}
if(isError)
{
setAsync_error(VIEWVISIBLE, errorMessageString);
}
}
class MyOnRefreshListener implements OnRefreshListener2<ListView> {
private PullToRefreshListView mPtflv;
public MyOnRefreshListener(PullToRefreshListView ptflv) {
this.mPtflv = ptflv;
}
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
// ����ˢ��
refreshView.getLoadingLayoutProxy().setReleaseLabel("�ſ���ˢ������");
String label = DateUtils.formatDateTime(getActivity(),
System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL);
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
new GetDownNewsTask(mPtflv, News.PageSize, parentID, articleType)
.execute();
// ˢ�����ݺ�״̬��ԭ
isCompleted = false;
refreshView.getLoadingLayoutProxy().setPullLabel("������ˢ��");
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
// ��������
// ������������
String updatetime = "2099-01-01 11:56:43.157";
Map<String, String> bottomMap;
int count = subNewAdapter.getCount();
if (count > 0) {
bottomMap = (Map<String, String>) subNewAdapter
.getItem(count - 1);
updatetime = bottomMap.get("UpdateTime");
}
new GetUpNewsTask(mPtflv, News.PageSize, parentID, articleType,
updatetime).execute();
}
}
/**
* �ⲿ����ˢ��ҳ������
*/
public void RefreshData() {
isCompleted = false;
refreshListView.autoRefresh();
}
/**
* ��������������������Ϣ��ˢ�£�
*
* @author brokge
*/
class GetDownNewsTask extends AsyncTask<String, Void, Integer> {
List<Map<String, String>> innerList = new ArrayList<Map<String, String>>();
CommandResult commandResult = new CommandResult(false, "��������");
int PageSize;
String Parentid;
String Articletype;
private PullToRefreshListView mPtrlv;
public GetDownNewsTask(PullToRefreshListView ptrlv, int pagesize,
String parentid, String articletype) {
this.mPtrlv = ptrlv;
PageSize = pagesize;
Parentid = parentid;
Articletype = articletype;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected Integer doInBackground(String... params) {
try {
if (Util.isNetworkConnected(mContext)) {
DBnewshelper dBnewshelper = new DBnewshelper(mContext);
String lastTimestamp = dBnewshelper.GetLastNewsTimestamp(
Articletype, Parentid);
if (lastTimestamp != null && !(lastTimestamp.equals(""))) {
lastTimestamp = lastTimestamp + "@0";
} else {
lastTimestamp = "";
}
// �����������ݣ�����ӵ����ؿ���,����ɾ�����ؿ���������
innerList = Article.getListOfColumn(Parentid, PageSize,
lastTimestamp);
if (innerList == null) {
commandResult.setResult(false);
commandResult.setMessage("Զ�����ݼ���Ϊ��");
return HTTP_REQUEST_ERROR;
} else if (innerList != null && innerList.size() > 0) {
dBnewshelper.Delete("ArticleType='" + Articletype
+ "' and ParentID=" + Parentid);
dBnewshelper.Insert(innerList, Articletype, Parentid);
commandResult.setResult(true);
commandResult.setMessage("Զ�����ݼ��سɹ�");
return HTTP_REQUEST_SUCCESS;
} else {
commandResult.setResult(false);
commandResult.setMessage("û������Ѷ");
return HTTP_REQUEST_ERROR;
}
} else {
commandResult.setResult(false);
commandResult.setMessage("������������");
return HTTP_REQUEST_ERROR;
}
} catch (Exception e) {
// TODO Auto-generated catch block
commandResult.setResult(false);
commandResult.setMessage("�쳣����");
return HTTP_REQUEST_ERROR;
}
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
switch (result) {
case HTTP_REQUEST_SUCCESS:
News inews = News.getInstance();
if (inews != null) {
inews.setNewNotice(parentID, View.GONE);
}
RefreshLoadData(innerList);
// async_error.getVisibility()
setAsync_error(VIEWGONE, commandResult.getMessage());
break;
case HTTP_REQUEST_ERROR:
if (!commandResult.getMessage().equals("û������Ѷ")) {
Toast.makeText(mContext, commandResult.getMessage(),
Toast.LENGTH_SHORT).show();
setAsync_error(VIEWVISIBLE, commandResult.getMessage());
} else {
setAsync_error(VIEWGONE, commandResult.getMessage());
}
break;
}
mPtrlv.onRefreshComplete();
mPtrlv.refreshComplate();
}
}
/**
* ��������������������Ϣ����ӣ�
*
* @author brokge
*
*/
class GetUpNewsTask extends AsyncTask<String, Void, Integer> {
List<Map<String, String>> innerList = new ArrayList<Map<String, String>>();
CommandResult commandResult = new CommandResult(false, "��������");
int PageSize;
String Parentid;
String Articletype;
private PullToRefreshListView mPtrlv;
String Updatetime;
public GetUpNewsTask(PullToRefreshListView ptrlv, int pagesize,
String parentid, String articletype, String updatetime) {
this.mPtrlv = ptrlv;
PageSize = pagesize;
Parentid = parentid;
Articletype = articletype;
Updatetime = updatetime;
}
@Override
protected Integer doInBackground(String... params) {
try {
if (Util.isNetworkConnected(mContext)) {
if (!isCompleted) {
// �ȼ��ر������ݣ������������Ϊ�������Զ�����ݣ�������ɺ�д�뱾�ؿ�
DBnewshelper dBnewshelper = new DBnewshelper(mContext);
innerList = dBnewshelper.GetList(Articletype, Parentid,
PageSize, Updatetime);
if (innerList == null || innerList.size() <= 0) {
innerList = Article.getListOfColumn(Parentid,
PageSize, Updatetime);
if (innerList.size() > 0) {
// ����ӷ��������سɹ�����ʼд�����ݵ����ؿ�
dBnewshelper.Insert(innerList, Articletype,
Parentid);
commandResult.setResult(true);
commandResult.setMessage("Զ�����ݼ��سɹ�");
return HTTP_REQUEST_SUCCESS;
} else {
commandResult.setResult(false);
commandResult.setMessage("û�и�������");
isCompleted = true;
return HTTP_REQUEST_ERROR;
}
} else {
commandResult.setResult(true);
commandResult.setMessage("���ػ������ݼ��سɹ�");
return HTTP_REQUEST_SUCCESS;
}
} else {
commandResult.setResult(false);
commandResult.setMessage("û�и�������");
return HTTP_REQUEST_ERROR;
}
}
return HTTP_REQUEST_ERROR;
} catch (Exception e) {
commandResult.setResult(false);
commandResult.setMessage("�쳣����");
return HTTP_REQUEST_ERROR;
}
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
switch (result) {
case HTTP_REQUEST_SUCCESS:
subNewAdapter.addNews(innerList);
subNewAdapter.notifyDataSetChanged();
break;
case HTTP_REQUEST_ERROR:
if (Util.isNetworkConnected(mContext) && isCompleted) {
mPtrlv.getLoadingLayoutProxy().setPullLabel(
commandResult.getMessage());
} else {
Toast.makeText(getActivity(), commandResult.getMessage(),
Toast.LENGTH_SHORT).show();
}
break;
}
mPtrlv.onRefreshComplete();
}
}
private void RefreshLoadData(List<Map<String, String>> list) {
Map<String, String> headerMap = list.get(0);
// ������ڴ�ͼ
if (headerMap.get("BigImage") != null
&& !headerMap.get("BigImage").equals("")) {
list.remove(0);
UpdateHeadViewVisible(VIEWVISIBLE);
UpdateHeadViewData(headerMap);
} else {
UpdateHeadViewVisible(VIEWGONE);
}
subNewAdapter.clearList();
subNewAdapter.addNews(list);
subNewAdapter.notifyDataSetChanged();
}
private void UpdateHeadViewVisible(int visible) {
if (headerView == null) {
CreateHeaderView();
}
switch (visible) {
case VIEWVISIBLE:
headerView.findViewById(R.id.news_headerImage).setVisibility(
View.VISIBLE);
headerView.findViewById(R.id.news_header_line_title).setVisibility(
View.VISIBLE);
break;
case VIEWGONE:
headerView.findViewById(R.id.news_headerImage).setVisibility(
View.GONE);
headerView.findViewById(R.id.news_header_line_title).setVisibility(
View.GONE);
break;
default:
break;
}
}
/**
* �ȴ���headerview
*
* @param headerMap
*/
public void CreateHeaderView() {
FrameLayout frameLayout = (FrameLayout) LayoutInflater.from(mContext)
.inflate(R.layout.news_frame_headertitle, null);
headerView = frameLayout;
}
/**
* ˢ���������д�ͼ���� ����headview
*
* @param headerMap
*/
private void UpdateHeadViewData(Map<String, String> headerMap) {
ImageView imageView = (ImageView) headerView
.findViewById(R.id.news_headerImage);
int width = DisplayParams.getInstance(mContext).screenWidth;
ViewGroup.LayoutParams lps = imageView.getLayoutParams();
lps.height = width / 2;
lps.width = width;
imageView.setLayoutParams(lps);
String imgurl = headerMap.get("BigImage");
String imagePath = Util.getNewsImgPath();
if (imgurl.toLowerCase().startsWith("http://") || imgurl.equals("")) {
} else {
imgurl = imagePath + imgurl;
}
BaseLoadImage(mContext, imgurl, imageView);
TextView titleView = (TextView) headerView
.findViewById(R.id.news_headerTitle);
titleView.setText(headerMap.get("Title"));
TextView typeView = (TextView) headerView
.findViewById(R.id.news_headerType);
typeView.setText(R.string.news_header_title_top);
final String ArticleID = headerMap.get("ArticleID").toString();
final String updatetimeString = headerMap.get("UpdateTime").toString();
final String Title = headerMap.get("Title").toString();
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startDetailActivity(getActivity(), ArticleID, Title,
News.articleType.toString(), updatetimeString);
}
});
}
/**
* ��һ�μ���ʱ����ز���
*
* @param list
*/
public void FristLoadData(List<Map<String, String>> list) {
CreateHeaderView();
refreshListView = (PullToRefreshListView) view
.findViewById(R.id.ptrlvSubNews);
refreshListView.getRefreshableView().addHeaderView(headerView);
Map<String, String> headerMap = list.get(0);
// ������ڴ�ͼ
if (headerMap.get("BigImage") != null
&& !headerMap.get("BigImage").equals("")) {
list.remove(0);
UpdateHeadViewVisible(VIEWVISIBLE);
UpdateHeadViewData(headerMap);
subNewAdapter = new NewListAdapter(mContext, list);
} else {
subNewAdapter = new NewListAdapter(mContext, list);
UpdateHeadViewVisible(VIEWGONE);
}
refreshListView.setMode(Mode.BOTH);
refreshListView.setAdapter(subNewAdapter);
// initPullToRefreshListView(refreshListView, subNewAdapter);
}
/**
* �ӱ���ץȡ���������������Ϣ
*
* @author brokge
*
*/
public class GetNewsTaskFrist extends AsyncTask<String, Void, Integer> {
CommandResult commandResult = new CommandResult(false, "��������");
int PageSize;
String Parentid;
String Articletype;
List<Map<String, String>> innerList = new ArrayList<Map<String, String>>();
Boolean isFromServer = true;
/**
* �ӱ���ץȡ���������������Ϣ
*
* @param articletype
* �������ͣ���ѶƵ��������ר��
* @param parentid
* Ƶ��id
* @param pagesize
* ÿҳ������
*/
public GetNewsTaskFrist(String articletype, String parentid,
int pagesize) {
PageSize = pagesize;
Parentid = parentid;
Articletype = articletype;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
listview_empty_error.setVisibility(View.GONE);
LoadingView.setVisibility(View.VISIBLE);
refreshListView.setMode(Mode.DISABLED);
}
@Override
protected Integer doInBackground(String... params) {
DBnewshelper dBnewshelper = new DBnewshelper(mContext);
try {
if (Util.isNetworkConnected(mContext)) {
// try {
// Thread.sleep(5000);
// ��һ�ν��룬�ȼ��ر������ݣ������������Ϊ�������Զ�����ݣ�������ɺ�д�뱾�ؿ�
innerList = dBnewshelper.GetList(Articletype, Parentid,
PageSize, "");
if (innerList == null || innerList.size() <= 0) {
innerList = Article.getListOfColumn(Parentid, PageSize,
"");
if (innerList != null && innerList.size() > 0) {
// ����ӷ��������سɹ�����ʼд�����ݵ����ؿ�
dBnewshelper.Insert(innerList, Articletype,
Parentid);
commandResult.setResult(true);
commandResult.setMessage("Զ�����ݼ��سɹ�");
return HTTP_REQUEST_SUCCESS;
} else {
commandResult.setResult(false);
commandResult.setMessage("Զ�����ݼ���ʧ��");
return HTTP_REQUEST_ERROR;
}
} else {
commandResult.setResult(true);
commandResult.setMessage("���ػ������ݼ��سɹ�1");
isFromServer = false;
return HTTP_REQUEST_SUCCESS;
}
} else {
innerList = dBnewshelper.GetList(Articletype, Parentid,
PageSize, "");
if (innerList != null && innerList.size() > 0) {
commandResult.setResult(true);
commandResult.setMessage("���ػ������ݼ��سɹ�2");
return HTTP_REQUEST_SUCCESS;
}
return HTTP_REQUEST_ERROR;
}
} catch (Exception e) {
// TODO Auto-generated catch block
commandResult.setResult(false);
commandResult.setMessage("Զ�����ݼ���ʧ��");
return HTTP_REQUEST_ERROR;
}
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
switch (result) {
case HTTP_REQUEST_SUCCESS:
postionMap.put(Postion, LOADED);
FristLoadData(innerList);
if (!isFromServer) {
RefreshData();
}
LoadingView.setVisibility(View.GONE);
break;
case HTTP_REQUEST_ERROR:
postionMap.put(Postion, LOADERROR);
Toast.makeText(mContext, commandResult.getMessage(),
Toast.LENGTH_SHORT).show();
ListViewEmptyError(commandResult.getMessage(),
new refreshOnclick());
// todo: �˴�����������������ش���
break;
}
}
}
/**
* listviewΪ��ʱ�ĵ���ظ���
*
* @param message
* @param onclick
*/
public void ListViewEmptyError(int message, OnClickListener onclick) {
LoadingView.setVisibility(View.GONE);
refreshListView.setEmptyView(listview_empty_error);
TextView txtMessageView = (TextView) listview_empty_error
.findViewById(R.id.listview_empty_message);
txtMessageView.setText(message);
Button btnRefreshViewButton = (Button) listview_empty_error
.findViewById(R.id.listview_empty_refresh);
btnRefreshViewButton.setOnClickListener(onclick);
}
/**
* listviewΪ��ʱ�ĵ���ظ���
*
* @param message
* @param onclick
*/
public void ListViewEmptyError(String message, OnClickListener onclick) {
errorMessageString=message;
LoadingView.setVisibility(View.GONE);
refreshListView.setEmptyView(listview_empty_error);
TextView txtMessageView = (TextView) listview_empty_error
.findViewById(R.id.listview_empty_message);
txtMessageView.setText(message);
Button btnRefreshViewButton = (Button) listview_empty_error
.findViewById(R.id.listview_empty_refresh);
btnRefreshViewButton.setOnClickListener(onclick);
}
public class refreshOnclick implements OnClickListener {
@Override
public void onClick(View v) {
// TODO �Զ����ɵķ������
// async_error.setVisibility(View.GONE);
// async_begin.setVisibility(View.VISIBLE);
// new AsyncLoader_Refresh().execute();
new GetNewsTaskFrist(articleType, parentID, News.PageSize)
.execute();
}
}
public void setAsync_error(int diplay, String message) {
errorMessageString=message;
switch (diplay) {
case VIEWGONE:
isError=false;
async_error.setVisibility(View.GONE);
break;
case VIEWVISIBLE:
isError=true;
async_error.setVisibility(View.VISIBLE);
Button refreshButton = (Button) async_error
.findViewById(R.id.async_error_reflesh);
TextView messageTextView = (TextView) async_error
.findViewById(R.id.async_error_txt);
messageTextView.setText(message);
refreshButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO �Զ����ɵķ������
RefreshData();
}
});
break;
default:
break;
}
}
}