Java 如何跟踪视图行的ArrayList的动态索引
我正在动态添加/删除行,每行有几个按钮,包括一个删除行的按钮 每一行表示ArrayList的一项(我有一个ArrayList,它用于存储行数据列表) 添加每一行时,我为delete按钮添加一个onClickListener:Java 如何跟踪视图行的ArrayList的动态索引,java,android,arraylist,view,Java,Android,Arraylist,View,我正在动态添加/删除行,每行有几个按钮,包括一个删除行的按钮 每一行表示ArrayList的一项(我有一个ArrayList,它用于存储行数据列表) 添加每一行时,我为delete按钮添加一个onClickListener: private ArrayList<item> ItemList = new ArrayList<>(); void AddRow(item item, int index){ ItemList.add(item); LinearL
private ArrayList<item> ItemList = new ArrayList<>();
void AddRow(item item, int index){
ItemList.add(item);
LinearLayout llItem = findViewById(R.id.llItem);
View rowview = inflater.inflate(R.layout.cardrow, null);
ImageButton btnDelete = rowview.findViewById(R.id.btnDelete);
btnDelete.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v){
list.remove(index); // <--- This is the problem, it is not dynamic
llItem.removeView((View) v.getParent());
}
});
llItem.addView(rowview, llItem.getChildCount());
}
private ArrayList ItemList=new ArrayList();
void AddRow(项目,整数索引){
项目列表。添加(项目);
LinearLayout llItem=findViewById(R.id.llItem);
视图行视图=充气机。充气(R.layout.cardrow,null);
ImageButton btnDelete=rowview.findViewById(R.id.btnDelete);
btnDelete.setOnClickListener(新视图.OnClickListener(){
@覆盖公共void onClick(视图v){
list.remove(index);//我在单击delete按钮时删除并重新生成视图,而不是匹配动态索引(在静态OnClickListener中这似乎很困难或不可能)。因此,每次删除行后,都会立即重新生成准确的索引
private ArrayList<item> ItemList = new ArrayList<>();
void AddRow(item item, int index){
ItemList.add(item);
LinearLayout llItem = findViewById(R.id.llItem);
View rowview = inflater.inflate(R.layout.cardrow, null);
ImageButton btnDelete = rowview.findViewById(R.id.btnDelete);
btnDelete.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v){
list.remove(index);
llItem.removeAllViews(); // <-- remove the views
for(int i=0;i<item.getSize();i++){ // <-- add the rows again
AddRow(item, i); // <-- rebuild accurate indices
}
}
});
llItem.addView(rowview, llItem.getChildCount());
}
private ArrayList ItemList=new ArrayList();
void AddRow(项目,整数索引){
项目列表。添加(项目);
LinearLayout llItem=findViewById(R.id.llItem);
视图行视图=充气机。充气(R.layout.cardrow,null);
ImageButton btnDelete=rowview.findViewById(R.id.btnDelete);
btnDelete.setOnClickListener(新视图.OnClickListener(){
@覆盖公共void onClick(视图v){
列表。删除(索引);
llItem.removeAllViews();//您的方法名称是AddRow()
,但您正在删除项。请显示更多代码和listView
适配器代码。它不会删除任何项。每次AddRow()被称为它添加1行,该行可以删除自身。删除代码位于该行的“删除”按钮的OnClickListener中。它正在工作(添加和删除行),唯一的问题是所描述的索引不匹配,这可能会导致边界外异常。如果您正在添加带有linearLayout
的视图,为什么需要listView
?listView
包含什么?这非常令人困惑。请显示更详细的代码。如果您使用RecyclerView而不是LinearLay会更好退出。这会容易得多。我没有任何listView,我使用的是ExpandableRecyclerView。每一行都是动态的,因此我将每一行的属性存储在ArrayList中。当片段被隐藏并再次显示时,我使用ArrayList来重建所有行。我唯一的问题是我无法跟踪OnClic中的行索引克莱斯特纳。