按照国际惯例,先上图:
核心代码在于以下两点:
/**
* 添加item
*/
private void addViewItem(){
View viewItem = LayoutInflater.from(this).inflate(R.layout.item_add_vip_num, llVipNumContainer,false);
llVipNumContainer.addView(viewItem);
sortViewItem();
//添加并且排序之后将布局滚动到底部,方便用户继续添加
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
}
/**
* 该方法主要用于排序(每个item中的序号),主要针对从中间删除item的情况
*/
private void sortViewItem(){
for(int i = 0; i < llVipNumContainer.getChildCount(); i++){
final View viewItem = llVipNumContainer.getChildAt(i);
TextView tvIndex = (TextView)viewItem.findViewById(R.id.tv_index);
tvIndex.setText((i+1) + "");
LinearLayout llDelete = (LinearLayout) viewItem.findViewById(R.id.ll_delete);
llDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
llVipNumContainer.removeView(viewItem);
sortViewItem();
}
});
}
}
注意两点:
1、每次添加/删除完成之后要进行重新排序,主要是针对从中间删除item时序号间断问题;
2、每次添加完成之后将ScrollView滚动到底部,方便用户继续进行添加操作。
源码传送门:https://github.com/tianyalu/DynamicallyAddItemDemo
如觉得对您有帮助,欢迎给个star。