Android ListView And GridView 单选模式
Android ListView And GridView 单选模式:
自定义TextView 使 ClassItemTextView 具有Checkable 功能 相当于 CheckBox
public class ClassItemTextView extends TextView implements Checkable {
private boolean mChecked;
public ClassItemTextView(Context context) {
super(context);
}
public ClassItemTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ClassItemTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setChecked(boolean checked) {
mChecked = checked;
setBackgroundDrawable(checked ? getResources().getDrawable(R.drawable.select_item): getResources().getDrawable(R.drawable.default_item));//当选中时呈现绿色
setTextColor(checked? Color.WHITE:Color.parseColor("#7D7D7D"));
}
@Override
public boolean isChecked() {
return mChecked;
}
@Override
public void toggle() {
setChecked(!mChecked);
}
}
Adapter 的写法
/**
* chooseAdapter
*/
class ChooseClassAdapter extends BaseAdapter {
private List<Boolean> booleanList;
private String[] array;
public ChooseClassAdapter(String[] array) {
booleanList = new ArrayList<>();
this.array = array;
}
@Override
public int getCount() {
return array.length;
}
@Override
public Object getItem(int position) {
return array[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = View.inflate(SingleActivity.this, R.layout.choose_class_imte, null);
viewHolder = new ViewHolder();
viewHolder.classText = (ClassItemTextView) convertView.findViewById(R.id.class_item_choose);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
for (int i = 0; i < getCount(); i++) {
if (i == 0) {
booleanList.add(true);
} else {
booleanList.add(false);
}
}
viewHolder.classText.setChecked(booleanList.get(position));
viewHolder.classText.setText(array[position].toString());
return convertView;
}
/**
* 匹配选择false
*
* @param position
*/
public void selectPosition(int position) {
for (int i = 0; i < getCount(); i++) {
if (position == i) {// 设置已选位置 (cast)
booleanList.set(i, true);
} else {
booleanList.set(i, false);
}
}
}
class ViewHolder {
private ClassItemTextView classText;
}
}
调用方式:
public class SingleActivity extends AppCompatActivity {
private GridView mListData;
private String chooseSelect;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] array = new String[]{"高一", "高二", "高三", "一年级", "二年级", "三年级", "四年级", "五年级", "六年级", "七年级", "八年级", "九年级"};
chooseSelect = "高一";
mListData = (GridView)findViewById(R.id.nianji_list);
final ChooseClassAdapter chooseClassAdapter = new ChooseClassAdapter(array);
mListData.setAdapter(chooseClassAdapter);
mListData.setChoiceMode(mListData.CHOICE_MODE_SINGLE);
mListData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (ListView.CHOICE_MODE_SINGLE == mListData.getChoiceMode()) {
String str = (String) mListData.getItemAtPosition(position);
chooseClassAdapter.selectPosition(mListData.getCheckedItemPosition());
/* ToastUtils.showMessage(mListData.getCheckedItemPosition() + "----" + str);*/
chooseClassAdapter.notifyDataSetChanged();
chooseSelect = str;
Toast.makeText(SingleActivity.this,chooseSelect+ "", Toast.LENGTH_SHORT).show();
}
}
});
}
效果如下:
链接http://download.csdn.net/download/bxllove/10219004