ListView一行显示两个Item并实现单选功能
2017-07-18 13:40
453 查看
最终效果如上图所示意
核心代码只要是Adapter里面完成一行显示两个item,并且加入一个回调接口进行返回数据
public class MyAdapter extends BaseAdapter {
private List<Payment> mList;
private Context mContext;
private int sumCount;
private ChangeTextView changeTextView;
public Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
changeTextView.changeTheText(msg.arg1);
break;
default:
break;
}
};
};
public MyAdapter(List<Payment> List, Context context, ChangeTextView changeTextView) {
this.mList = List;
this.mContext = context;
this.changeTextView = changeTextView;
}
@Override
public int getCount() {
int count = mList.size();
if (count % 2 == 0) {
sumCount = count / 2; // 如果是双数直接减半
} else {
sumCount = (int) Math.floor((double) count / 2) + 1;
}
return sumCount;
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
static class ViewHolder {
PayItem payitem1;
PayItem payitem2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_pay_item, null);
holder.payitem1 = (PayItem) convertView.findViewById(R.id.payItem1);
holder.payitem2 = (PayItem) convertView.findViewById(R.id.payItem2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.payitem1.setDescription(mList.get(position * 2).getDescription());
holder.payitem1.setDetail(mList.get(position * 2).getDetail());
holder.payitem1.setCharge(mList.get(position * 2).getCharge());
holder.payitem1.setIsSelected(mList.get(position * 2).getStatus());
if (position * 2 + 1 == mList.size()) {
holder.payitem2.setVisibility(View.INVISIBLE); // 如果是单数的话,那么最后一个item,右侧内容为空
} else {
holder.payitem2.setVisibility(View.VISIBLE); // 必须进行设置,负责存在复用holder的时候,会出现右侧的出现留白,跟最后一个一样,这个也是我写这篇文章最想锁的
holder.payitem2.setDescription(mList.get(position * 2 + 1).getDescription());
holder.payitem2.setDetail(mList.get(position * 2 + 1).getDetail());
holder.payitem2.setCharge(mList.get(position * 2 + 1).getCharge());
holder.payitem2.setIsSelected(mList.get(position * 2+1).getStatus());
}
holder.payitem1.setMyItemClickedListener(new MyOnEvenClick(position));
holder.payitem2.setMyItemClickedListener(new MyOnOddClick(position));
return convertView;
}
private class MyOnEvenClick implements MyItemClicked {
int pos = 0;
public MyOnEvenClick(int position) {
this.pos = position * 2;
}
@Override
public void myItemClicked() {
Message message = new Message();
message.what = 1;
message.arg1 = pos;
handler.sendMessage(message);
}
}
private class MyOnOddClick implements MyItemClicked {
int pos = 0;
public MyOnOddClick(int position) {
this.pos = position * 2 + 1;
}
@Override
public void myItemClicked() {
Message message = new Message();
message.what = 1;
message.arg1 = pos;
handler.sendMessage(message);
}
}
// 设置监听
interface ChangeTextView {
void changeTheText(int position);
}
}整个项目托管到GitHub上了 https://github.com/matrixth/AndroidTools
界面很单薄,可以自行修改
相关文章推荐
- C# listview如何显示网格线以及如何实现item的选中功能
- Android ListView中点击单行实现RadioButton的单选功能,自定义Item布局文件
- DevExpress.LookUpEdit控件实现自动搜索定位功能(定位和显示可是同一行不同列值)
- Android使用Item Swipemenulistview实现仿QQ侧滑删除功能
- ListView,Expandable 自定义单选,多选功能实现及注意
- 实现xlistview+xutils展示数据之后点击item跳转页面显示图片缩放和放大
- listview中实现item播放音乐的进度显示
- 自定义listview,实现Item侧滑显示删除、置顶按钮
- ListView的Item中的图片拖拽功能的实现
- Listview中Item倒计时的功能实现
- Android listView item侧滑实现删除和置顶功能
- 实现ScrollView中包含ListView,动态设置ListView的高度(listview不能显示全,不能正确计算item的高度)
- 怎样实现ListView的item显示 高亮显示默认Item
- android(2)在listView中设置长按显示button,实现删除item
- 实现ListView滑动时出现蓝色的Scrollbar,拖动scrollbar出现当前显示的item的简介
- ListView 显示多种itemView布局的简单实现
- ListView实现购物车功能包含单选与多选和修改数量
- Android_ListView 用多样式item实现复杂布局显示
- 使用bmob后端云中listview如何实现数据显示在第一个item
- Anddroid ExpandableListView 实现父Item悬浮在顶部不动,子Item滑动显示,直到下一个父Item滑动到顶部的效果