package com.simtice.cnbeta.ui;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.MenuItem;
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.j256.ormlite.stmt.QueryBuilder;
import com.simtice.cnbeta.R;
import com.simtice.cnbeta.adapter.CommentAdapter;
import com.simtice.cnbeta.bean.Comment;
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 CommentListActivity extends SherlockActivity implements ActionBar.OnNavigationListener {
private PullToRefreshListView listView;
private long articleID;
private CommentAdapter adapter;
private List<Comment> lists;
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Sherlock___Theme_Light);
super.onCreate(savedInstanceState);
setContentView(R.layout.common_list);
init();
initView();
}
private void init() {
articleID = getIntent().getLongExtra("ArticleID", 0);
lists = new ArrayList<Comment>();
}
private void initView() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setIcon(R.drawable.icon);
ArrayAdapter<CharSequence> navigationAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
R.array.comment, R.layout.sherlock_spinner_item);
navigationAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
this.getSupportActionBar().setTitle("");
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setListNavigationCallbacks(navigationAdapter, this);
listView = (PullToRefreshListView) this.findViewById(R.id.pl_common_list);
adapter = new CommentAdapter(this, lists);
listView.setAdapter(adapter);
listView.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
getCommentList(articleID);
}
});
listView.setRefreshing(false);// 设置正在刷新 需要修改PullToRefreshListView
// onRefreshing方法中把adapter.isEmpty()去掉,否则第一次进来不会刷新
}
private void getCommentList(final long articleID) {
final Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (getApplicationContext() == null)
return;
switch (msg.what) {
case Constant.REQUEST_SUCCESS:
try {
Type listType = new TypeToken<ArrayList<Comment>>() {
}.getType();
List<Comment> list = JsonUtil.parseBeanFromJson((String) msg.obj, listType);
for (Comment comment : list) {
comment.setArticleID(articleID);
DatabaseHelper.getHelper(getApplicationContext()).getCommentDao().create(comment);
}
notifyDataSetChanged(0);
if (lists.size() == 0) {
CommonUtil.showToast(getApplicationContext(), "暂无评论");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
ExceptionUtil.handlException(e, CommentListActivity.this);
}
listView.onRefreshComplete();
break;
case Constant.REQUEST_FAILED:
ExceptionUtil.handlException((Exception) msg.obj, getApplicationContext());
listView.onRefreshComplete();
break;
case Constant.NO_NETWORK:
CommonUtil.showNoNetworkToast(getApplicationContext());
listView.onRefreshComplete();
break;
}
};
};
new Thread(new Runnable() {
@Override
public void run() {
HttpUtil util = new HttpUtil(CommentListActivity.this, handler);
util.httpGet(Constant.URL_GETCOMMENT + articleID);
}
}).start();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
notifyDataSetChanged(itemPosition);
return false;
}
private void notifyDataSetChanged(int type) {
lists.clear();
lists.addAll(queryComment(type));
adapter.notifyDataSetChanged();
}
/**
* 查询评论
*
* @param type
* 1:所有评论 2:热门评论
* @return
*/
private List<Comment> queryComment(int type) {
try {
Dao<Comment, Integer> commentDao = DatabaseHelper.getHelper(getApplicationContext()).getCommentDao();
QueryBuilder<Comment, Integer> builder = commentDao.queryBuilder();
builder.where().eq("ArticleID", articleID);
switch (type) {
case 0:
builder.orderBy("tid", false);
break;
case 1:
builder.orderBy("support", false).orderBy("tid", false);
break;
}
return builder.query();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}