我有一个arraylist,对于该列表中的每个项目,输出项目旁边有一个按钮,以便从列表中删除该项目。
ArrayList<String> alString = new ArrayList();
//ArrayList gets filled with data items
RelativeLayout Container = (RelativeLayout) findViewById(R.id.container);
int Tracker = 500000000;
for (String item:alString){
final TextView textView = new TextView(this);
textView.setText(item);
textView.setId(Tracker);
//positioning
RelativeLayout.LayoutParams textViewParams = new
RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
textViewParams.addRule(RelativeLayout.BELOW,Tracker - 2);
textViewParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
textView.setLayoutParams(textViewParams);
//Create button to remove ingredient
final Button Xbutton = new Button(this);
Xbutton.setText("X");
Xbutton.setId(Tracker + 1);
//positioning
RelativeLayout.LayoutParams XbuttonParams = new
RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
XbuttonParams.addRule(RelativeLayout.ALIGN_TOP,
textView.getId());
XbuttonParams.addRule(RelativeLayout.ALIGN_BOTTOM,
textView.getId());
XbuttonParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
Xbutton.setLayoutParams(XbuttonParams);
//When button is clicked, remove the item
Xbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alString.remove(item);
Container.removeView(textView);
Container.removeView(Xbutton);
}
});
Container.addView(textView);
Container.addView(Xbutton);
Tracker = Tracker + 2;
}
}
问题是,假设有10个项目,我用Xbuttons删除了第5个和第7个项目,很多项目开始重叠。所有的观点最终只是坐在彼此之上。如果我从上到下或从下到上逐个删除它们,则不会发生这种情况。但是,只要我删除列表中间的项目,它们就会开始相互重叠。我知道这是因为 跟踪器 - 来自textViewParams.addRule(RelativeLayout.BELOW,Tracker - 2)的2不再存在。但是,我需要那行代码,以便它们按顺序排列。如何阻止TextViews重叠?
答案 0 :(得分:1)
尝试将ListView与自定义列表适配器一起使用,而不是手动添加视图。
ListView listView =(ListView)findViewById(R.id.listView);
ListAdapter adapter = new CustomAdapter(MainActivity.this,dataItems); //要添加的项目列表
adapter.setCustomButtonListner(MainActivity.this);
listView.setAdapter(适配器);
创建扩展ArrayAdapter的自定义列表适配器(CustomAdapter)
为每个列表项创建布局,并为删除按钮初始化OnClickListener(确保在适配器的getView方法中设置按钮的标记)
每次删除某个项目时,请调用notifyDataSetChanged()刷新该列表。