package com.linju.android_property.servicemanager;
import java.io.File;
import java.util.ArrayList;
import roboguice.inject.InjectView;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.linju.android_property.activity.LoginActivity;
import com.linju.android_property.adapter.RepairAdapter;
import com.linju.android_property.application.AppApplication;
import com.linju.android_property.base.BaseActivity;
import com.linju.android_property.entity.Login_Bean;
import com.linju.android_property.entity.Talk_repair_Bean;
import com.linju.android_property.utils.BasicMember;
import com.linju.android_property.utils.DownloadUtils;
import com.linju.android_property.utils.FileUtils;
import com.linju.android_property.utils.ParseJson;
import com.linju.android_property.utils.RequestURL;
import com.linju.android_property.utils.StringUtils;
import com.linju.android_property.viewutils.Toaster;
import com.linju.android_property.viewutils.WPTextView;
import com.linju.android_property2.R;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
/**
* 报修的activity list
*
* @author Administrator
*
*/
public class RepairList extends BaseActivity implements OnClickListener,
AnimationListener, OnItemClickListener, OnCheckedChangeListener,
OnRefreshListener2 {
// 0:未处理 1:处理中 2:已完成 3:已取消)
public static final int unfinish = 0;
public static final int finish = 1;
public static final int processing = 2;
public static final int cancelled = 3;
public static final String sug = "&";
@InjectView(R.id.back)
Button back;
@InjectView(R.id.title)
WPTextView titlebar;
@InjectView(R.id.edit_or_add)
Button editOrAdd;
@InjectView(R.id.more)
View more;
@InjectView(R.id.app_loading)
View loadinglayout;
@InjectView(R.id.action_bar)
View actionbar;
@InjectView(R.id.query)
EditText query;
@InjectView(R.id.search_clear)
ImageButton clear;
@InjectView(R.id.mainTitle) //页面搜索跟分类
RelativeLayout searchTitle;
@InjectView(R.id.filter)
RadioGroup mRadioGroup;
@InjectView(R.id.mainLinelayout)
LinearLayout mainLayout;
@InjectView(R.id.empty)
RelativeLayout empey;
@InjectView(R.id.lists)
PullToRefreshListView mListView;
private ListView mlist;
private ArrayList<Talk_repair_Bean> beans;
private RepairAdapter adapter;
public int limite = 10; // 每页10条
public int offsetint = 0; // 分页标识
public int type = 0; // 选中后的类型 默认是0
public static int offsetintlocal = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_repair_list);
editOrAdd.setVisibility(View.GONE);
more.setVisibility(View.GONE);
titlebar.setText(getResources().getString(R.string.baoxiu));
back.setOnClickListener(this);
clear.setVisibility(View.VISIBLE);
mRadioGroup.setOnCheckedChangeListener(this);
// listview的刷新监听
mListView.setOnRefreshListener(this);
// clear.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// if(actionbar.getVisibility() == View.GONE){
// actionbar.setVisibility(View.VISIBLE);
// }else{
// actionbar.setVisibility(View.GONE);
// }
// }
// });
query.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
actionbar.setVisibility(View.GONE);
} else {
actionbar.setVisibility(View.VISIBLE);
}
}
});
initListView();
}
// 初始化listview的数据
private void initListView() {
TextView t = (TextView) empey.findViewById(R.id.hint);
t.setText("没有任何数据哦!");
mListView.setEmptyView(empey);
mlist = mListView.getRefreshableView();
// 默认获取未完成的列表
getlistData(unfinish);
}
private void getlistData(int i) {
mListView.onRefreshComplete();
loadinglayout.setVisibility(View.VISIBLE);
// 网络请求 获取报修信息数据 根据I的类型
RequestParams params = new RequestParams();
params.put(BasicMember.OFFSET, offsetint + "");
params.put(BasicMember.LIMITE, limite + "");
params.put(BasicMember.STATUS, i + "");
params.put(Login_Bean.USER_SUBDISTRICTADDRESSID, LoginActivity
.getUser().getSubdistrict_address_id());
AppApplication.getHttpClient().get(RequestURL.GET_REPAIR_LIST, params,
new AsyncHttpResponseHandler() {
@Override
@Deprecated
public void onFailure(Throwable error) {
super.onFailure(error);
}
@Override
public void onFinish() {
loadinglayout.setVisibility(View.GONE);
}
@Override
public void onStart() {
super.onStart();
}
@Override
@Deprecated
public void onSuccess(String content) {
parseJsonbean(content,false);
}
});
}
/**
*
* @param json json数据
* @param loadMore 是否是加载下一页
*/
private void parseJsonbean(String json,boolean loadMore){
if(loadMore == true){
ArrayList<Talk_repair_Bean> be = ParseJson.Get_Repair_JSON(json);
if(be != null && be.size() > 0 ){
beans.addAll(be);
mListView.onRefreshComplete();
adapter.notifyDataSetChanged();
//判断数据是否小于10条
if(be.size() <= limite){
mListView.setMode(Mode.PULL_DOWN_TO_REFRESH);
}else{
mListView.setMode(Mode.BOTH);
}
}
}else{
if(beans != null){
beans.clear();
}
beans = ParseJson.Get_Repair_JSON(json);
//获取数据判断数据是否为空
if(beans != null && beans.size() > 0 ){
adapter = new RepairAdapter(this,beans);
//判断数据是否小于10条
mListView.onRefreshComplete();
if(beans.size() < limite){
mListView.setMode(Mode.PULL_DOWN_TO_REFRESH);
}else{
mListView.setMode(Mode.BOTH);
}
}
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(this);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.back:
onBackPressed();
break;
default:
break;
}
}
//手势动画
private float lastX = 0;
private float lastY = 0;
private boolean mIsTitleHide = false;
private boolean mIsAnim = false;
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
super.dispatchTouchEvent(event);
if (mIsAnim || mlist.getCount() <= 80) {
return false;
}
final int action = event.getAction();
float x = event.getX();
float y = event.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
lastY = y;
lastX = x;
return false;
case MotionEvent.ACTION_MOVE:
float dY = Math.abs(y - lastY);
float dX = Math.abs(x - lastX);
boolean down = y > lastY ? true : false;
lastY = y;
lastX = x;
if (dX < 8 && dY > 8 && !mIsTitleHide && !down) {
Animation anim = AnimationUtils.loadAnimation(RepairList.this,
R.anim.push_top_in);
// anim.setFillAfter(true);
anim.setAnimationListener(RepairList.this);
searchTitle.startAnimation(anim);
} else if (dX < 8 && dY > 8 && mIsTitleHide && down) {
Animation anim = AnimationUtils.loadAnimation(RepairList.this,
R.anim.push_top_out);
// anim.setFillAfter(true);
anim.setAnimationListener(RepairList.this);
searchTitle.startAnimation(anim);
} else {
return false;
}
mIsTitleHide = !mIsTitleHide;
mIsAnim = true;
break;
default:
return false;
}
return false;
}
@Override
public void onAnimationStart(Animation animation) {
searchTitle.setVisibility(View.VISIBLE);
if (mIsTitleHide) {
LinearLayout.LayoutParams lp = (LayoutParams) mainLayout
.getLayoutParams();
lp.setMargins(0, 0, 0, 0);
mainLayout.setLayoutParams(lp);
} else {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) searchTitle
.getLayoutParams();
lp.setMargins(0, 0, 0, 0);
searchTitle.setLayoutParams(lp);
LinearLayout.LayoutParams lp1 = (LayoutParams) mainLayout
.getLayoutParams();
// lp1.setMargins(0,
// getResources().getDimensionPixelSize(R.dimen.title_height),
// 0, 0);
mainLayout.setLayoutParams(lp1);
}
}
@Override
public void onAnimationEnd(Animation animation) {
if (mIsTitleHide) {
searchTitle.setVisibility(View.GONE);
} else {
}
mIsAnim = false;
}
@Override
public void onAnimationRepeat(Animation animation) {
}
//列表点击事件
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//根据类型来判断是否处理
Talk_repair_Bean b = beans.get(position-1);
Intent it = null;
if(Talk_repair_Bean.unfinish.equals(b.getStatus())){
it = new Intent(this,RepairInfo.class);
it.putExtra(RepairInfo.EXTRAOBJ, b);
}else{
it = new Intent(this,RepairInfoDone.class);
it.putExtra(RepairInfoDone.EXTRAOBJ, b);
}
startActivity(it);
overridePendingTransition(R.anim.left_in, R.anim.left_out);
}
//单选按钮的切换事件
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == R.id.btn1) {
offsetintlocal = 0;
type = unfinish;
getlistData(unfinish);
} else if (checkedId == R.id.btn2) {
offsetintlocal = 0;
type = finish;
getlistData(finish);
} else if (checkedId == R.id.btn3) {
offsetintlocal = 0;
type = processing;
getlistData(processing);
} else if (checkedId == R.id.btn4) {
offsetintlocal = 0;
type = cancelled;
getlistData(cancelled);
}
}
// 下拉刷新
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
String label = DateUtils.formatDateTime(this.getApplicationContext(),
System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL);
// Update the LastUpdatedLabel
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
// Do work to refresh the list here.
new GetDataTask().execute();
}
private class GetDataTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
// Simulates a background job.
String result = null;
offsetint = 0; // 让分页标示恢复初始化
String url = RequestURL.GET_REPAIR_LIST + "?"
+ Login_Bean.USER_SUBDISTRICTADDRESSID + "="
+ LoginActivity.getUser().getSubdistrict_address_id() + sug
+ BasicMember.STATUS + "=" + type + sug
+ BasicMember.OFFSET + "=" + offsetint + sug
+ BasicMember.LIMITE + "=" + limite;
File file = new File(AppApplication.mSdcardCache
+ File.separator+StringUtils.replaceUrlWithPlus(url));
if (file.exists() && file.isFile()) {
file.delete();
}
try {
DownloadUtils.download(url, file, false, null);
result = FileUtils.readTextFile(file);
} catch (Exception e) {
// TODO: handle exception
// Logger.e("ContentListFragment", "下拉刷新", e);
}
return result;
}
@Override
protected void onPostExecute(String result) {
if (result != null) {
parseJsonbean(result,false);
}
// Call onRefreshComplete when the list has been refreshed.
mListView.onRefreshComplete();
super.onPostExecute(result);
}
}
// 上啦刷新
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
// TODO Auto-generated method stub
String label = DateUtils.formatDateTime(this.getApplicationContext(),
System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME
| DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_ABBREV_ALL);
// Update the LastUpdatedLabel
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
// Do work to refresh the list here.
int position = beans.size() - 1;
loadMoreData1(position);
}
private void loadMoreData1(final int position) {
RequestParams params = new RequestParams();
params.put(BasicMember.OFFSET, String.valueOf((offsetintlocal += limite)));
params.put(BasicMember.LIMITE, limite + "");
params.put(BasicMember.STATUS, type + "");
params.put(Login_Bean.USER_SUBDISTRICTADDRESSID, LoginActivity
.getUser().getSubdistrict_address_id());
AppApplication.getHttpClient().get(RequestURL.GET_REPAIR_LIST, params,
new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String content) {
// TODO Auto-generated method stub
parseJsonbean(content,true);
mListView.onRefreshComplete();
}
@Override
public void onFailure(Throwable error) {
// TODO Auto-generated method stub
mListView.onRefreshComplete();
Toaster.showOneToast(R.string.app_loading_fail);
}
});
}
}