ResultElectionCustomFragment.java 9.55 KB
package com.sunvote.xpadapp.fragments;

import android.annotation.SuppressLint;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;

import com.sunvote.util.LogUtil;
import com.sunvote.xpadapp.MainActivity;
import com.sunvote.xpadapp.R;
import com.sunvote.xpadapp.base.BaseFragment;
import com.sunvote.xpadapp.base.TextViewUtils;
import com.sunvote.xpadapp.db.modal.BillInfo;
import com.sunvote.xpadapp.db.modal.MultiTitleItem;
import com.sunvote.xpadcomm.XPadApiInterface;
import com.ycanfunc.util.StringUtils;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import static com.sunvote.xpadapp.utils.MyStringUtil.replaceBlank;

public class ResultElectionCustomFragment extends BaseFragment {

	public byte[] data;
	public BillInfo bill;
	public XPadApiInterface.VoteInfo voteInfo;
	String TAG = "ResultMultiVoteFragment";

	public ArrayList<BillInfo> subInfo;
	String[] options;

	private ArrayList<ListItem> aryContent = null;

	private TextView tvTitle;
	private TextView titleAbstain;
	private TextView titleUnvote;
	private TextView titleResult;

	private ListView listview;
	private MyAdapter mAdapter;
	private int resultBits;

	int fenmu;
	int yindao;
	int shidao;

	@SuppressLint("NewApi")
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		LogUtil.d(TAG, "onCreateView");
		View view = inflater.inflate(R.layout.fragment_result_election_custom, container, false);
		final MainActivity mact = (MainActivity) getActivity();

		view.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				;
			}
		});

		listview = (ListView) view.findViewById(R.id.fragment_result_election_list);
		options = bill.billOptions.split("/");

		try {
			initData();
		}catch (Exception ex){ex.printStackTrace();}

		mAdapter = new MyAdapter(getActivity());
		listview.setAdapter(mAdapter);

		tvTitle = (TextView) view.findViewById(R.id.tv_title);
		if (bill != null) {
			tvTitle.setText(replaceBlank(bill.title));
		}

		TextView tvYindao = (TextView) view.findViewById(R.id.yingdaoresult);
		TextView tvShidao = (TextView) view.findViewById(R.id.shidaoresult);
		if (yindao == 0xff || yindao == 0xffff) {
			tvYindao.setVisibility(View.GONE);
		} else {
			tvYindao.setText("" + + yindao);
			tvYindao.setVisibility(View.VISIBLE);
		}

		if (shidao == 0xff || shidao == 0xffff) {
			tvShidao.setVisibility(View.GONE);
		} else {
			tvShidao.setText("" + shidao);
			tvShidao.setVisibility(View.VISIBLE);
		}
		return view;
	}

	private void initData() {

		int bitNum = data[2] & 0xf;
		int digiters = data[2] >> 4 & 0xf;
		int voteNo = data[3] & 0xff;
		int startNo = ((data[4] & 0xff) << 8) | (data[5] & 0xff) ;
		int endNo =   ((data[6] & 0xff) << 8) | (data[7] & 0xff) ;
		int rH = data[8] & 0xff;
		int rL = data[9] & 0xff;
		resultBits = rH << 8 | rL;

		// resultBits = ((data[8] << 8) | data[9]) & 0xff;

		// Log.d(TAG, "data len:" + data.length);
		// Toast.makeText(mMainActivity, "data len:" + data.length,
		// Toast.LENGTH_LONG).show();
		subInfo = mMainActivity.dbm.getSubBillItems(mMainActivity.meetingId, bill.billId);
		aryContent = new ArrayList<ListItem>();

		if (bitNum == 0) {
			// 0 单字节数值(数值范围0-254) 现按一次最多显示5个事项
			fenmu = data[10] & 0xff;
			yindao = data[11] & 0xff;
			shidao = data[12] & 0xff;
			int pos = 13;
			for (int i = startNo; i <= endNo; i++) {
				ListItem it = new ListItem();
				it.No = i;
				it.title = getTitle(i);
				it.agree = data[pos++] & 0xff;
				it.oppose = data[pos++] & 0xff;
				if (pos == data.length - 1) {
					aryContent.add(it);
					break;
				}
				if (options.length == 3) {
					it.abstain = data[pos++] & 0xff;
				}
				if (pos == data.length - 1) {
					aryContent.add(it);
					break;
				}
				it.unvote = data[pos++] & 0xff;
				if (resultBits == 0xffff) {
//					it.pass = data[pos++] & 0xff;
					it.pass = 0xffff;
				} else {
					int moveBits = 15 - (i - startNo);
					it.pass = (resultBits >> moveBits) & 1;
				}
				aryContent.add(it);
			}
		} else if(bitNum == 1){
			// 1 双字节数值(数值范围0-65534) 现按一次最多显示5个事项
			fenmu = (data[10] << 8 | data[11]) & 0xffff;
			yindao = (data[12] << 8 | data[13]) & 0xffff;
			shidao = (data[14] << 8 | data[15]) & 0xffff;
			int pos = 16;
			for (int i = startNo; i <= endNo; i++) {
				ListItem it = new ListItem();
				it.No = i;
				it.title = getTitle(i);
				it.agree = (data[pos++] << 8 | data[pos++]) & 0xffff;
				it.oppose = (data[pos++] << 8 | data[pos++]) & 0xffff;
				if (options.length == 3) {
					it.abstain = (data[pos++] << 8 | data[pos++]) & 0xffff;
				}
				it.unvote = (data[pos++] << 8 | data[pos++]) & 0xffff;
				if (resultBits == 0xffff) {
					it.pass = 0xffff;
				} else {
					int moveBits = 15 - (i - startNo);
					it.pass = (resultBits >> moveBits) & 1;
				}
				aryContent.add(it);
			}
		}else if(bitNum == 2){
			// 0 单字节数值(数值范围0-254) 现按一次最多显示5个事项
			fenmu = data[10] & 0xff;
			yindao = data[11] & 0xff;
			shidao = data[12] & 0xff;
			int pos = 13;
			for (int i = startNo; i <= endNo; i++) {
				ListItem it = new ListItem();
				it.No = data[pos++] & 0xff;
				it.title = getTitle(it.No);
				it.agree = data[pos++] & 0xff;
				it.oppose = data[pos++] & 0xff;
				if (pos == data.length - 1) {
					aryContent.add(it);
					break;
				}
				if (options.length == 3) {
					it.abstain = data[pos++] & 0xff;
				}
				if (pos == data.length - 1) {
					aryContent.add(it);
					break;
				}
				it.unvote = data[pos++] & 0xff;
				if (resultBits == 0xffff) {
					it.pass = 0xffff;
				} else {
					int moveBits = 15 - (i - startNo);
					it.pass = (resultBits >> moveBits) & 1;
				}
				aryContent.add(it);
			}
		}else if(bitNum == 3){
			// 双字节数值制定表决事项编号(数值范围0-65534)现按一次最多显示5个事项
			// 单字节数值制定表决事项编号(数值范围0-254)现按一次最多显示5个事项
			// 1 双字节数值(数值范围0-65534) 现按一次最多显示5个事项
			fenmu = (data[10] << 8 | data[11]) & 0xffff;
			yindao = (data[12] << 8 | data[13]) & 0xffff;
			shidao = (data[14] << 8 | data[15]) & 0xffff;
			int pos = 16;
			for (int i = startNo; i <= endNo; i++) {
				ListItem it = new ListItem();
				it.No = (data[pos++] << 8 | data[pos++]) & 0xffff;
				it.title = getTitle(it.No);
				it.agree = (data[pos++] << 8 | data[pos++]) & 0xffff;
				it.oppose = (data[pos++] << 8 | data[pos++]) & 0xffff;
				if (options.length == 3) {
					it.abstain = (data[pos++] << 8 | data[pos++]) & 0xffff;
				}
				it.unvote = (data[pos++] << 8 | data[pos++]) & 0xffff;
				if (resultBits == 0xffff) {
					it.pass = 0xffff;
				} else {
					int moveBits = 15 - (i - startNo);
					it.pass = (resultBits >> moveBits) & 1;
				}
				aryContent.add(it);
			}
		}

	}

	private String getTitle(int billNo) {
		for (int i = 0; i < subInfo.size(); i++) {
			BillInfo subItem = subInfo.get(i);
			if (subItem.billNo == billNo) {
				return subItem.title;
			}
		}
		return "";
	}

	public class ListItem {
		int No;
		String title;
		int agree;
		int oppose;
		int abstain;
		int unvote;
		int pass;
	}

	/*
	 * MyAdapter
	 *
	 */
	private class MyAdapter extends BaseAdapter {

		private LayoutInflater mInflater;

		public MyAdapter(Context context) {
			this.mInflater = LayoutInflater.from(context);
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return aryContent.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return aryContent.get(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public boolean isEnabled(int position) {
			// TODO Auto-generated method stub

			return super.isEnabled(position);
		}

		@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			LogUtil.v("BaseAdapterTest", "getView " + position + " " + convertView);

			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.list_result_election_custom_item, null);
				holder = new ViewHolder();
				holder.tvNum = (TextView) convertView.findViewById(R.id.item_result_election_num);
				holder.tvTitle = (TextView) convertView.findViewById(R.id.item_result_election_name);
				holder.tvAgree = (TextView) convertView.findViewById(R.id.item_result_election_agree);

				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			ListItem it = aryContent.get(position);
			holder.tvNum.setText(String.valueOf(it.No));
			holder.tvTitle.setText(it.title);

			if(it.agree != 0xff && it.agree != 0xffff){
				holder.tvAgree.setVisibility(View.VISIBLE);
				holder.tvAgree.setText(String.valueOf(it.agree));
			}else{
				holder.tvAgree.setVisibility(View.INVISIBLE);
				holder.tvAgree.setText("");
			}
			if (position % 2 == 0) {
				convertView.setBackgroundColor(getResources().getColor(R.color.blue2));
			}
			return convertView;
		}

		public final class ViewHolder {
			public TextView tvNum;
			public TextView tvTitle;
			public TextView tvAgree;
		}
	}
}