listview单选开关设置,listview单击事件无响应

来源:互联网 发布:淘宝五星好评怎么截图 编辑:程序博客网 时间:2024/05/16 10:30


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));

}
});


0 0
原创粉丝点击