package com.threeH.MyExhibition.ui;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.*;
import com.google.gson.Gson;
import com.threeH.MyExhibition.R;
import com.threeH.MyExhibition.adapters.ExhibitionListAdapter;
import com.threeH.MyExhibition.common.StringPools;
import com.threeH.MyExhibition.entities.Exhibition;
import com.threeH.MyExhibition.entities.ExhibitionList;
import com.threeH.MyExhibition.tools.Tool;
import com.threeH.MyExhibition.widget.XListView;
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: pjq
* Date: 13-6-19
* Time: 下午2:29
* To change this template use File | Settings | File Templates.
*/
public class ExhibitionListActivity extends BaseActivity implements ActivityInterface,
AdapterView.OnItemClickListener,XListView.IXListViewListener {
private XListView mLvi;
private ExhibitionListAdapter mAdapter;
private ExhibitionList mJsonData;
private EditText mEdttxtTheme;
private String mStrTheme = "";
public static String mStrScanExKey = "";
private LoadAsyncTask mLoadAsyncTask;
private Button mBtnSearch;
private long mLngCreatedAt = -1;
private static final int SIZE = 5;
private ImageView mImgviewCancel;
private PullupLoadAsyncTask mPullupLoadAsyncTask;
private List<Exhibition> mData = new ArrayList<Exhibition>();
private List<Exhibition> mItemClickDataes = new ArrayList<Exhibition>();
private ExhibitionList mDataByQrcode;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(1 == msg.what){
setItemClickdataes(mData);
mAdapter = new ExhibitionListAdapter(context, mData,token);
mLvi.setAdapter(mAdapter);
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentViewWithNoTitle(R.layout.unsingup_exhibitionlist);
findView();
addAction();
}
@Override
protected void onResume() {
mImgviewCancel.setVisibility(View.GONE);
if(!mStrScanExKey.equals("")){
try {
String str = mController.getService().UnErollExListByExKey(token, 1, -1, mStrScanExKey);
mDataByQrcode = new Gson().fromJson(str,ExhibitionList.class);
ArrayList<Exhibition> list = mDataByQrcode.getList();
if(list != null){
mData.clear();
makeAllExhibitionListAdapterData(mDataByQrcode);
mEdttxtTheme.setText(list.get(0).getName());
sendHandlerMessage(1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
super.onResume();
}
@Override
protected void onPause() {
mStrScanExKey = "";
super.onPause();
}
@Override
protected void onDestroy() {
mLoadAsyncTask = null;
super.onDestroy();
}
@Override
public void findView() {
mLvi = (XListView) this.findViewById(R.id.unsingup_exhibition_listview);
mEdttxtTheme = (EditText) this.findViewById(R.id.titlebar_et);
mImgviewCancel = (ImageView) this.findViewById(R.id.titlebar_imageview_cancel);
mBtnSearch = (Button) this.findViewById(R.id.search_btn);
}
@Override
public void initdata() {
mLoadAsyncTask = new LoadAsyncTask();
mLoadAsyncTask.execute();
}
@Override
public void addAction() {
mLvi.setOnItemClickListener(this);
mLvi.setPullLoadEnable(true);
mLvi.setXListViewListener(this);
mImgviewCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mEdttxtTheme.setText("");
mImgviewCancel.setVisibility(View.GONE);
}
});
mEdttxtTheme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mImgviewCancel.setVisibility(View.VISIBLE);
}
});
mEdttxtTheme.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == 0) {
searchExhibition();
handled = true;
}
return handled;
}
});
mEdttxtTheme.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mImgviewCancel.setVisibility(View.VISIBLE);
}
@Override
public void afterTextChanged(Editable s) {
}
});
mBtnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchExhibition();
}
});
}
private void searchExhibition() {
try{
mStrTheme = mEdttxtTheme.getText().toString().trim();
String str;
if(null != mStrTheme && !("".equals(mStrTheme))){
str = mController.getService().UnErollExList(token,SIZE,-1, mStrTheme);
ExhibitionList allExhibitionData = new Gson().fromJson(str,ExhibitionList.class);
setCreateAt(allExhibitionData);
mData = Tool.makeAllExhibitionListAdapterData(allExhibitionData);
mAdapter = new ExhibitionListAdapter(context, mData,token);
mLvi.setAdapter(mAdapter);
setItemClickdataes(mData);
}else {
mData.clear();
mLvi.setAdapter(null);
}
}catch (Exception e){
e.printStackTrace();
}
}
private void setCreateAt(ExhibitionList allExhibitionData) {
int last = allExhibitionData.getList().size() - 1;
if(last >= 0){
mLngCreatedAt = allExhibitionData.getList().get(last).getCreatedAt();
}
}
private void setItemClickdataes(List<Exhibition> dataes){
mItemClickDataes.clear();
for (Exhibition exhibition : dataes) {
mItemClickDataes.add(exhibition);
}
mData.clear();
for (Exhibition exhibition : mItemClickDataes) {
mData.add(exhibition);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(this,ExhibitionActivity.class);
intent.putExtra("exhibition",mItemClickDataes.get(position -1));
intent.putExtra("token",token);
startActivity(intent);
}
private void onLoad() {
mLvi.stopRefresh();
mLvi.stopLoadMore();
mLvi.setRefreshTime("");
}
@Override
public void onRefresh() {
mStrTheme = mEdttxtTheme.getText().toString().trim();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mData.clear();
initdata();
onLoad();
}
}, 2000);
}
@Override
public void onLoadMore() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
loadNextPageData();
mAdapter.notifyDataSetChanged();
onLoad();
}
}, 2000);
}
public void makeAllExhibitionListAdapterData(ExhibitionList allExhibitionData){
if(null != allExhibitionData){
for(Exhibition exhibition : allExhibitionData.getList()){
mData.add(exhibition);
}
}
}
private void loadNextPageData(){
try {
String str = mController.getService().UnErollExList(token,SIZE, mLngCreatedAt, mStrTheme);
mJsonData = new Gson().fromJson(str,ExhibitionList.class);
setCreateAt(mJsonData);
makeAllExhibitionListAdapterData(mJsonData);
setItemClickdataes(mData);
} catch (Exception e) {
}
}
/**
* 发送handler消息
* @param what 消息标志
*/
private void sendHandlerMessage(int what){
Message message = handler.obtainMessage();
message.what = what;
handler.sendMessage(message);
}
class LoadAsyncTask extends AsyncTask<Void,Integer,Integer>{
@Override
protected Integer doInBackground(Void... voids) {
new Thread(new Runnable() {
@Override
public void run() {
try {
if(null != mStrTheme && !("".equals(mStrTheme))){
String str = mController.getService().UnErollExList(token,SIZE,-1, mStrTheme);
mJsonData = new Gson().fromJson(str,ExhibitionList.class);
setCreateAt(mJsonData);
makeAllExhibitionListAdapterData(mJsonData);
sendHandlerMessage(1);
}
} catch (Exception e) {
}
}
}).start();
return null;
}
}
class PullupLoadAsyncTask extends AsyncTask<Void,Integer,Integer>{
@Override
protected Integer doInBackground(Void... voids) {
new Thread(new Runnable() {
@Override
public void run() {
try {
String str = mController.getService().UnErollExList(token,SIZE, mLngCreatedAt, mStrTheme);
mJsonData = new Gson().fromJson(str,ExhibitionList.class);
setCreateAt(mJsonData);
makeAllExhibitionListAdapterData(mJsonData);
} catch (Exception e) {
}
}
}).start();
return null;
}
}
}