listview中单机某一项实现单选,传递脚标,更新UI的状态。
adapter.notifyDataSetInvalidated(): 更新界面UI 只是界面变化用这个即可
adapter.notifyDataSetChanged(); 更新界面UI和数据变化,
item中要用imageView 设为单选按钮。
item中最好不用 imageButton设为单选按钮会和listview单机事件冲突,导致单机效过较差
android:descendantFocusability="blocksDescendants" (listview点击事件不响应)
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了
/**
* 适配器中的代码示例*
*/
public class ShiooingadressAdapter extends MBaseAdapter<MiaoshaAdressBean> {
private AdapterCallback callBack;
private boolean flagAdapter = false;
private int currentPosition = 0;
public ShiooingadressAdapter(Context context) {
super(context);
}
public void setAdapterCallback(AdapterCallback callBack) {
this.callBack = callBack;
}
// 传进来单机值,设置单机脚标
public void setCheckPosition(int position) {
currentPosition = position;
notifyDataSetInvalidated();// 更新UI,数据没有改变不需要调用接口,就用这个刷新
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.miaosha_address_item2, null);
holder.imageButton1 = (ImageView) convertView
.findViewById(R.id.imageButton1);
holder.tvAdress2 = (TextView) convertView
.findViewById(R.id.textview_address);
holder.imageButton2 = (ImageButton) convertView
.findViewById(R.id.imageButton2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.reset();// 给每一个item设置默认图片和字体颜色
final MiaoshaAdressBean bean = getItem(position);
final String id = bean.getId();
String address = bean.getAddress();
String name = bean.getName();
String phone = bean.getPhone();
StringBuilder builder = new StringBuilder();
builder.append(address).append(" " + name).append(" " + phone);
holder.tvAdress2.setText(builder + "");
holder.imageButton2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
callBack.callBack(v, bean, position);
}
});
/// 如果单机lsitview的脚标和当前填充脚标相等的话,imageview改为选中图片,字体颜色改为蓝色
if (currentPosition == position) {holder.imageButton1.setImageResource(R.drawable.miaosha_dian_s);
holder.tvAdress2.setTextColor(context.getResources().getColor(
color.textblue));
}
return convertView;
}
class ViewHolder {
private ImageView imageButton1;
private TextView tvAdress2;
private ImageButton imageButton2;
/// holder中设置未选中的默认图片和默认颜色 ,在填充ui之前,都设置每个item的默认图片
public void reset() {
imageButton1.setImageResource(R.drawable.miaosha_dian);
tvAdress2.setTextColor(color.text_gray_light);
}
}
public interface AdapterCallback {
void callBack(View view, MiaoshaAdressBean bean, int position);
}
}
Activity中的listview单机事件,调用adapter中封装的方法,传递过去当前的position,判断是否相等,如果相等在填充UI的时候改变为选中状态
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
mId = position;
adapter.setCheckPosition(position);// 单机lsitview的某一项,将脚标传进去
imgBtn.setImageResource(R.drawable.miaosha_dian);
visibleGone.setVisibility(View.GONE);
tvAddress.setTextColor(mContext.getResources().getColor(
R.color.text_gray_light));
}
});