package com.yeetou.xinyongkaguanjia.component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.yeetou.xinyongkaguanjia.R;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
/**
* 我的SpinnerButton
* @author chaisong
*
*/
public class MySpinnerButton extends Button {
private Context context;
private MyListItemOnClickListener myListItemOnClickListener;
private List<String> currContent;
private boolean isContain = true;
public MySpinnerButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
// 设置监听事件
setOnClickListener(new MySpinnerButtonOnClickListener());
}
public MySpinnerButton(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
// 设置监听事件
setOnClickListener(new MySpinnerButtonOnClickListener());
}
public MySpinnerButton(Context context) {
super(context);
this.context = context;
// 设置监听事件
setOnClickListener(new MySpinnerButtonOnClickListener());
}
/**
* MySpinnerButton的点击事件
* @author chaisong
*
*/
class MySpinnerButtonOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
final MySpinnerDropDownItems mSpinnerDropDrownItems = new MySpinnerDropDownItems(context,currContent);
if (!mSpinnerDropDrownItems.isShowing()) {
mSpinnerDropDrownItems.showAsDropDown(MySpinnerButton.this);
}
}
}
/**
* MySpinnerButton的下拉列表
* @author chaisong
*
*/
class MySpinnerDropDownItems extends PopupWindow{
private Context context;
private LinearLayout mLayout; // 下拉列表的布局
private ListView mListView; // 下拉列表控件
private ArrayList<HashMap<String, String>> mData;
public MySpinnerDropDownItems(Context context,List<String> currContent){
super(context);
this.context = context;
// 下拉列表的布局
mLayout = new LinearLayout(context);
mLayout.setOrientation(LinearLayout.VERTICAL);
// 下拉列表控件
mListView = new ListView(context);
mListView.setLayoutParams(new LayoutParams(MySpinnerButton.this.getWidth(), LayoutParams.WRAP_CONTENT));
mListView.setCacheColorHint(Color.TRANSPARENT);
mData = new ArrayList<HashMap<String,String>>();
HashMap<String, String> mHashmap;
if(isContain){
mHashmap = new HashMap<String, String>();
mHashmap.put("spinner_dropdown_item_textview", "全部");
mData.add(mHashmap);
}
for(int i=currContent.size()-1; i>=0; i--){
mHashmap = new HashMap<String, String>();
mHashmap.put("spinner_dropdown_item_textview", currContent.get(i));
mData.add(mHashmap);
}
// 为listView设置适配器
mListView.setAdapter(new MyAdapter(context,
mData, R.layout.spinner_dropdown_item,
new String[]{"spinner_dropdown_item_textview"}, new int[]{R.id.spinner_dropdown_item_textview}));
// 设置listView的点击事件
mListView.setOnItemClickListener(new MyListViewOnItemClickedListener());
// 把下拉列表添加到layout中。
mLayout.addView(mListView);
setWidth(LayoutParams.WRAP_CONTENT);
setHeight(LayoutParams.WRAP_CONTENT);
setContentView(mLayout);
setFocusable(true);
mLayout.setFocusableInTouchMode(true);
}
/**
* 我的适配器
* @author chaisong
*
*/
public class MyAdapter extends BaseAdapter {
private Context context;
private List<? extends Map<String, ?>> mData;
private int mResource;
private String[] mFrom;
private int[] mTo;
private LayoutInflater mLayoutInflater;
public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
this.context = context;
this.mData = data;
this.mResource = resource;
this.mFrom = from;
this.mTo = to;
this.mLayoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return this.mData.size();
}
public Object getItem(int position) {
return this.mData.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View contentView, ViewGroup parent) {
contentView = this.mLayoutInflater.inflate(this.mResource, parent, false);
for(int index=0; index<this.mTo.length; index++){
TextView textView = (TextView) contentView.findViewById(this.mTo[index]);
textView.setText(this.mData.get(position).get(this.mFrom[index]).toString());
}
return contentView;
}
}
/**
* listView的点击事件
* @author chaisong
*
*/
class MyListViewOnItemClickedListener implements AdapterView.OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
TextView mTextView = (TextView) view.findViewById(R.id.spinner_dropdown_item_textview);
String content = mTextView.getText().toString();
MySpinnerButton.this.setText(content);
MySpinnerDropDownItems.this.dismiss();
if(myListItemOnClickListener!=null)
myListItemOnClickListener.onClick(content);
}
}
}
public void setListContent(List<String> listcontent){
currContent = listcontent;
}
public void setMyListItemOnClick(MyListItemOnClickListener myListItemOnClickListener){
this.myListItemOnClickListener = myListItemOnClickListener;
}
public void setContainAll(boolean isContain){
this.isContain = isContain;
}
public interface MyListItemOnClickListener{
public void onClick(String text);
}
}