网上一般的方法通过自定义不同的shage,然后继承ListView重写onInterceptTouchEvent方法。但是,有一个弊端,在onItemClickListener方法中,无法改变item中想要改变的文字颜色。所以把onInterceptTouchEvent中的实现方法放到adapter中去实现,就可以解决.
根据:http://blog.csdn.net/wangkuifeng0118/article/details/7746175 改良后得以实现
自定义Adapter代码:
public class ListFilterPopAdapter extends BBaseAdapter {
private List<String> list;
private int slectedPosition = 0;
public ListFilterPopAdapter(Context mContext, List<String> list) {
setInflater(mContext);
this.list = list;
}
public void setSelectedItem(int position) {
this.slectedPosition = position;
notifyDataSetChanged();
}
@Override
public int getCount() {
if (list == null)
return 0;
return list.size();
}
@Override
public String getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
view = inflater.inflate(R.layout.filter_item_pop, null);
TextView textView = ViewHolder.getHolderView(view, R.id.rb_item);
textView.setText(getItem(position));
if (slectedPosition == position) {
textView.setSelected(true);
setItemBackGroud(position, view);
} else {
textView.setSelected(false);
}
return view;
}
private void setItemBackGroud(int position, View view) {
if (position == 0) {
if (position == (getCount() - 1)) {
// 只有一项
view.setBackgroundResource(R.drawable.list_corner_round);
} else {
// 第一项
view.setBackgroundResource(R.drawable.list_corner_round_top);
}
} else if (position == (getCount() - 1))
// 最后一项
view.setBackgroundResource(R.drawable.list_corner_round_bottom);
else {
// 中间一项
view.setBackgroundResource(R.drawable.list_corner_round_mid);
}
}
}
然后在 onItemClickListener中调用 setSelectedItem 方法即可