怎么实现listview中的每个item同时左右滑动功能?
一个列表listview现在需要做的是,实现左右滑动时,该列表中的每个item都跟着左右滑动。
在线急等
NineOldAndroids,你用这个就行,网上有实例代码的
listview横向滚动?
外部嵌套一个scrollview
主要是在ListView的item在HorizontalScrollView中,设置其中的一个控件的宽度为屏幕的宽度就可以了。我的ListView中的item是一个TextView,两个Button。实现的是类似于QQ聊天的那种,如果你想要实现左右滑动的话,可以在函数中(getView中试试)将左边的控件的设置为unvisible,中间显示的控件宽度设置为屏幕的宽度,然后为ListView的item设置左右滑动监听,一旦触发左滑,那么左边的控件就显示出来了。
重写SimpleAdapter(也可以是其他的适配器)的getView函数:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder view = new ViewHolder();
convertView = inflater.inflate(rescourceId, parent, false);
/*这一句会使这里面的修改在引用这个适配器时有效*/
view.item = (TextView) convertView.findViewById(R.id.item);
view.item.setWidth(getScreenWidth());
/*设置为屏幕宽度*/
view.item.setText(listData.get(position).get("big").toString());
view.item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.changeState(position);
}
});
view.deleteButton = (Button) convertView.findViewById(R.id.deleteButton);
view.deleteButton.setText(listData.get(position).get("delete").toString());
view.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.deleteClick(position);
}
});
view.navigateButton = (Button) convertView.findViewById(R.id.navigateButton);
view.navigateButton.setText(listData.get(position).get("navigate").toString());
view.navigateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickListener.navigateClick(position);
}
});
return convertView;
}
/*以下是要放在listView的item中的控件组合*/
class ViewHolder {
TextView item;
Button navigateButton;
Button deleteButton;
}
/*按钮的监听接口,你可以根据自己的需要比如左滑事件、右滑事件等进行修改*/
public interface onItemClickListener {
void deleteClick(int i); /*删除事件*/
void changeState(int i); /*点击TextView事件*/
void navigateClick(int i);/*点击导航事件*/
}
public void setOnItemClickListener(onItemClickListener mOnItemDeleteListener) {
this.clickListener = mOnItemDeleteListener;
}
然后再Activity的页面初始化中去实现接口回调:
adapter1.setOnItemClickListener(new UnsolvedSimpleAdapter.onItemClickListener() {
@Override
public void deleteClick(int i) {
/*如果map1和map2中的map对象的键不一样,那么添加的列会在手机上显示空白选项*/
if (MapList1.size() > 0) {
MapList1.remove(i);
adapter1.notifyDataSetChanged();
}
}
@Override
public void changeState(int i) {
if (MapList1.size() > 0) {
MapList2.add(MapList1.get(i));
MapList1.remove(i);
adapter1.notifyDataSetChanged();
adapter2.notifyDataSetChanged();
/*使用adapter2为空或者其指向的数据源为空,或与ListView断开联系等情况都会导致闪退*/
}
}
});