package com.withiter.quhao.activity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.withiter.quhao.QHClientApplication;
import com.withiter.quhao.R;
import com.withiter.quhao.adapter.CreditAdapter;
import com.withiter.quhao.adapter.CreditCostHolder;
import com.withiter.quhao.task.DeleteCreditTask;
import com.withiter.quhao.util.ActivityUtil;
import com.withiter.quhao.util.StringUtils;
import com.withiter.quhao.util.http.CommonHTTPRequest;
import com.withiter.quhao.util.tool.ParseJson;
import com.withiter.quhao.vo.Credit;
public class CreditCostListActivity extends QuhaoBaseActivity{
protected static boolean backClicked = false;
private static String TAG = CreditCostListActivity.class.getName();
private List<Credit> credits;
private ListView creditsListView;
private CreditAdapter creditAdapter;
private boolean isFirstLoad = true;
/**
* 删除面板的layout
*/
private LinearLayout deleteLayout;
/**
* 删除按钮
*/
private Button deleteBtn;
/**
* 选择所有按钮
*/
private Button selectAllBtn;
/**
* 反向选择
*/
private Button deselectAllBtn;
/**
* 取消
*/
private Button cancelBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.credit_cost_list_layout);
super.onCreate(savedInstanceState);
creditsListView = (ListView) this.findViewById(R.id.creditsListView);
btnBack.setOnClickListener(goBack(this, this.getClass().getName()));
deleteBtn = (Button) this.findViewById(R.id.btn_delete);
deleteBtn.setOnClickListener(this);
deleteBtn.setVisibility(View.GONE);
selectAllBtn = (Button) this.findViewById(R.id.bt_selectall);
selectAllBtn.setOnClickListener(this);
deselectAllBtn = (Button) this.findViewById(R.id.bt_deselectall);
deselectAllBtn.setOnClickListener(this);
cancelBtn = (Button) this.findViewById(R.id.bt_cancel);
cancelBtn.setOnClickListener(this);
deleteLayout = (LinearLayout) this.findViewById(R.id.deleteMenuLayout);
deleteLayout.setVisibility(View.GONE);
CreditCostListActivity.this.findViewById(R.id.loadingbar).setVisibility(View.VISIBLE);
CreditCostListActivity.this.findViewById(R.id.serverdata).setVisibility(View.GONE);
}
private void initListView() {
Thread thread = new Thread(getCreditsRunnable);
thread.start();
}
private Handler creditsUpdateHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 200) {
super.handleMessage(msg);
if(null == credits || credits.isEmpty())
{
deleteBtn.setVisibility(View.GONE);
}
else
{
deleteBtn.setVisibility(View.VISIBLE);
}
if (isFirstLoad) {
creditAdapter = new CreditAdapter(CreditCostListActivity.this, creditsListView, credits);
creditsListView.setAdapter(creditAdapter);
isFirstLoad = false;
} else {
creditAdapter.credits = credits;
}
if (null == credits ||credits.isEmpty()) {
Toast.makeText(CreditCostListActivity.this, R.string.no_result_4_credit_cost, Toast.LENGTH_SHORT).show();
}
creditAdapter.notifyDataSetChanged();
creditsListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.e(TAG, "onclick : " + position);
if(null!=creditAdapter && "true".equals(creditAdapter.isShowDelete))
{
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
CreditCostHolder holder = (CreditCostHolder) view.getTag();
// 改变CheckBox的状态
holder.cb.toggle();
// 将CheckBox的选中状况记录下来
// 调整选定条目
if (holder.cb.isChecked() == true) {
credits.get(position).isChecked = "true";
// checkNum++;
} else {
credits.get(position).isChecked = "false";
// checkNum--;
}
}
}
});
CreditCostListActivity.this.findViewById(R.id.loadingbar).setVisibility(View.GONE);
CreditCostListActivity.this.findViewById(R.id.serverdata).setVisibility(View.VISIBLE);
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
}
}
};
private Runnable getCreditsRunnable = new Runnable() {
@Override
public void run() {
try {
Looper.prepare();
if (!ActivityUtil.isNetWorkAvailable(getApplicationContext())) {
Toast.makeText(getApplicationContext(), R.string.network_error_info, Toast.LENGTH_SHORT).show();
unlockHandler.sendEmptyMessage(UNLOCK_CLICK);
findViewById(R.id.loadingbar).setVisibility(View.GONE);
findViewById(R.id.commentsLayout).setVisibility(View.VISIBLE);
return;
}
String accountId = QHClientApplication.getInstance().accountInfo.accountId;
String buf = CommonHTTPRequest.get("getCreditCost?accountId=" + accountId);
if (StringUtils.isNull(buf) || "[]".equals(buf)) {
if (isFirstLoad || null == credits) {
credits = new ArrayList<Credit>();
}
creditsUpdateHandler.obtainMessage(200, credits).sendToTarget();
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
// throw new NoResultFromHTTPRequestException();
} else {
if (isFirstLoad || null == credits) {
credits = new ArrayList<Credit>();
}
List<Credit> credits1 = ParseJson.getCredits(buf);
credits.addAll(credits1);
creditsUpdateHandler.obtainMessage(200, credits).sendToTarget();
}
} catch (Exception e) {
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
e.printStackTrace();
} finally {
Looper.loop();
}
}
};
@Override
public void onClick(View v) {
// 已经点过,直接返回
if (isClick) {
return;
}
// 设置已点击标志,避免快速重复点击
isClick = true;
switch (v.getId()) {
case R.id.btn_delete:
if(null!=creditAdapter && "true".equals(creditAdapter.isShowDelete))
{
deleteBtn.setText(R.string.delete);
deleteLayout.setVisibility(View.GONE);
creditAdapter.isShowDelete = "false";
/*
final List<Credit> creditsTemp = new ArrayList<Credit>(credits.size());
// Collections.copy(rvosTemp, reservations);
// System.arraycopy(reservations, 0, rvosTemp, 0, reservations.size());
if (null != credits && !credits.isEmpty()) {
for (int i = 0; i < credits.size(); i++) {
creditsTemp.add(new Credit(credits.get(i).creditId, credits.get(i).accountId, credits.get(i).merchantId, credits.get(i).merchantName, credits.get(i).merchantAddress, credits.get(i).reservationId, credits.get(i).cost, credits.get(i).status, credits.get(i).created));
}
}
List<String> rIds = new ArrayList<String>();
Iterator<Credit> iterator = creditsTemp.iterator();
String ridStr = "";
while (iterator.hasNext()) {
Credit temp = iterator.next();
if ("true".equals(temp.isChecked)) {
rIds.add(temp.creditId);
ridStr = ridStr + temp.creditId + ",";
iterator.remove();
}
}
Log.e(TAG, ridStr);
*/
String ridStr = "";
if (null != credits && !credits.isEmpty()) {
for (int i = 0; i < credits.size(); i++) {
if ("true".equals(credits.get(i).isChecked)) {
ridStr = ridStr + credits.get(i).creditId + ",";
}
}
}
// 解锁
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
// String url = "delCredit?id=" + ridStr;
String url = "delCredit";
Map<String, String> params = new HashMap<String, String>();
params.put("id", ridStr);
final DeleteCreditTask task = new DeleteCreditTask(R.string.waitting,this,url,params);
task.execute(new Runnable(){
@Override
public void run() {
// credits = creditsTemp;
Iterator<Credit> iterator = credits.iterator();
while (iterator.hasNext()) {
Credit temp = iterator.next();
if ("true".equals(temp.isChecked)) {
iterator.remove();
}
}
if(!credits.isEmpty())
{
for (int i = 0; i < credits.size(); i++) {
credits.get(i).isChecked = "false";
}
}
creditAdapter.credits = credits;
creditAdapter.notifyDataSetChanged();
Toast.makeText(CreditCostListActivity.this, R.string.delete_success, Toast.LENGTH_SHORT).show();
}
},new Runnable() {
@Override
public void run() {
if(!credits.isEmpty())
{
for (int i = 0; i < credits.size(); i++) {
credits.get(i).isChecked = "false";
}
}
creditAdapter.credits = credits;
creditAdapter.notifyDataSetChanged();
Toast.makeText(CreditCostListActivity.this, R.string.delete_failed, Toast.LENGTH_SHORT).show();
}
});
// reservationForPaiduiAdapter.notifyDataSetChanged();
}
else if(null!=creditAdapter && "false".equals(creditAdapter.isShowDelete))
{
deleteBtn.setText(R.string.confirm_delete);
deleteLayout.setVisibility(View.VISIBLE);
creditAdapter.isShowDelete = "true";
creditAdapter.notifyDataSetChanged();
// 解锁
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 10);
}
break;
case R.id.bt_selectall:
if(null!=creditAdapter && "true".equals(creditAdapter.isShowDelete))
{
deleteLayout.setVisibility(View.VISIBLE);
if(null == credits)
{
credits = new ArrayList<Credit>();
}
if(!credits.isEmpty())
{
for (int i = 0; i < credits.size(); i++) {
credits.get(i).isChecked = "true";
}
creditAdapter.credits = credits;
creditAdapter.notifyDataSetChanged();
}
}
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 10);
break;
case R.id.bt_deselectall:
if(null!=creditAdapter && "true".equals(creditAdapter.isShowDelete))
{
deleteLayout.setVisibility(View.VISIBLE);
if(null == credits)
{
credits = new ArrayList<Credit>();
}
if(!credits.isEmpty())
{
for (int i = 0; i < credits.size(); i++) {
if("true".equals(credits.get(i).isChecked))
{
credits.get(i).isChecked = "false";
}
else
{
credits.get(i).isChecked = "true";
}
}
creditAdapter.credits = credits;
creditAdapter.notifyDataSetChanged();
}
}
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 10);
break;
case R.id.bt_cancel:
if(null!=creditAdapter && "true".equals(creditAdapter.isShowDelete))
{
deleteBtn.setText(R.string.delete);
deleteLayout.setVisibility(View.GONE);
if(null == credits)
{
credits = new ArrayList<Credit>();
}
creditAdapter.isShowDelete = "false";
if(!credits.isEmpty())
{
for (int i = 0; i < credits.size(); i++) {
credits.get(i).isChecked = "false";
}
creditAdapter.credits = credits;
creditAdapter.notifyDataSetChanged();
}
}
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 10);
break;
default:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 10);
break;
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
@Override
protected void onResume() {
backClicked = false;
super.onResume();
credits = new ArrayList<Credit>();
initListView();
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "backClicked: " + backClicked);
if (backClicked) {
}
}
}