1. 程式人生 > >自定義ChooseMoneyLayout選擇金額

自定義ChooseMoneyLayout選擇金額

package jiuyuhulian.com.merchantstoreApp.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.GridView; import jiuyuhulian.com.merchantstoreApp.R; /** * Created by Admin on 2017/3/9. */ public class ChooseMoneyLayout extends GridView { private int[] moneyList = {}; //資料來源 private LayoutInflater mInflater; private MyAdapter adapter; //介面卡 int defaultChoose
= -1; //預設選中項 public ChooseMoneyLayout(Context context, AttributeSet attrs) { super(context, attrs); setData(); } public void setData() { mInflater = LayoutInflater.from(getContext()); //配置介面卡 adapter = new MyAdapter(); setAdapter(adapter
); } /** * 設定預設選擇專案, * @param defaultChoose */ public void setDefaultPositon(int defaultChoose) { this.defaultChoose = defaultChoose; adapter.notifyDataSetChanged(); } /** * 設定資料來源 * @param moneyData */ public void setMoneyData(int[] moneyData){ this.moneyList = moneyData; } class MyAdapter extends BaseAdapter { private CheckBox checkBox; @Override public int getCount() { return moneyList.length; } @Override public Object getItem(int position) { return moneyList[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { MyViewHolder holder; if (convertView == null) { holder = new MyViewHolder(); convertView = mInflater.inflate(R.layout.item_money_pay, parent, false); holder.moneyPayCb = (CheckBox) convertView.findViewById(R.id.money_pay_cb); convertView.setTag(holder); } else { holder = (MyViewHolder) convertView.getTag(); } holder.moneyPayCb.setText(getItem(position) + "元"); holder.moneyPayCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { //設定選中文字顏色 buttonView.setTextColor(getResources().getColor(R.color.white)); //取消上一個選擇 if (checkBox != null) { checkBox.setChecked(false); } checkBox = (CheckBox) buttonView; } else { checkBox = null; //設定不選中文字顏色 buttonView.setTextColor(getResources().getColor(R.color.black)); } //回撥 listener.chooseMoney(position, isChecked, (Integer) getItem(position)); } }); if (position == defaultChoose) { defaultChoose = -1; holder.moneyPayCb.setChecked(true); checkBox = holder.moneyPayCb; } return convertView; } private class MyViewHolder { private CheckBox moneyPayCb; } } /** * 解決巢狀顯示不完 * @param widthMeasureSpec * @param heightMeasureSpec */ @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } private onChoseMoneyListener listener; public void setOnChoseMoneyListener(onChoseMoneyListener listener) { this.listener = listener; } public interface onChoseMoneyListener { /** * 選擇金額返回 * * @param position gridView的位置 * @param isCheck 是否選中 * @param moneyNum 錢數 */ void chooseMoney(int position, boolean isCheck, int moneyNum); } }