package com.simtice.cnbeta.ui;
import java.lang.ref.WeakReference;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.actionbarsherlock.app.SherlockFragment;
import com.google.gson.reflect.TypeToken;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.j256.ormlite.dao.Dao;
import com.simtice.cnbeta.R;
import com.simtice.cnbeta.adapter.Top10Adapter;
import com.simtice.cnbeta.bean.Top10;
import com.simtice.cnbeta.db.DatabaseHelper;
import com.simtice.cnbeta.util.CommonUtil;
import com.simtice.cnbeta.util.Constant;
import com.simtice.cnbeta.util.ExceptionUtil;
import com.simtice.cnbeta.util.HttpUtil;
import com.simtice.cnbeta.util.JsonUtil;
public class Top10Fragment extends SherlockFragment {
private PullToRefreshListView listView;
private List<Top10> lists;
private Top10Adapter adapter;
private Dao<Top10, Integer> top10Dao;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
init();
}
private void init() {
lists = new ArrayList<Top10>();
adapter = new Top10Adapter(getActivity(), lists);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
try {
top10Dao.delete(top10Dao.queryForAll());
for (Top10 top10 : lists) {
top10Dao.create(top10);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.common_list, container, false);
listView = (PullToRefreshListView) view.findViewById(R.id.pl_common_list);
listView.setAdapter(adapter);
try {
top10Dao = DatabaseHelper.getHelper(getActivity()).getTop10Dao();
lists.addAll(top10Dao.queryForAll());
adapter.notifyDataSetChanged();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent intent = new Intent(getActivity(), NewsDetailActivity.class);
intent.putExtra("ArticleID", lists.get(arg2 - 1).getArticleID());
intent.putExtra("title", lists.get(arg2 - 1).getTitle());
startActivity(intent);
}
});
listView.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
getTop10();
}
});
listView.setRefreshing(false);
return view;
}
static class MyHandler extends Handler{
WeakReference<Top10Fragment> mFragmet;
MyHandler(Top10Fragment fragment){
mFragmet = new WeakReference<Top10Fragment>(fragment);
}
@Override
public void handleMessage(Message msg) {
Top10Fragment fragment = mFragmet.get();
if (fragment.getActivity() == null)
return;
switch (msg.what) {
case Constant.REQUEST_SUCCESS:
Type listType = new TypeToken<ArrayList<Top10>>() {
}.getType();
try {
List<Top10> temp = JsonUtil.parseBeanFromJson((String) msg.obj, listType);
fragment.lists.clear();
fragment.lists.addAll(temp);
fragment.adapter.notifyDataSetChanged();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
ExceptionUtil.handlException(e, fragment.getActivity());
}
fragment.listView.onRefreshComplete();
break;
case Constant.REQUEST_FAILED:
ExceptionUtil.handlException((Exception) msg.obj, fragment.getActivity());
fragment.listView.onRefreshComplete();
break;
case Constant.NO_NETWORK:
CommonUtil.showNoNetworkToast(fragment.getActivity());
fragment.listView.onRefreshComplete();
break;
}
}
}
private void getTop10() {
final MyHandler handler = new MyHandler(this);
new Thread(new Runnable() {
@Override
public void run() {
HttpUtil util = new HttpUtil(getActivity(), handler);
util.httpGet(Constant.URL_GETTOP10);
}
}).start();
}
}