Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何跟踪视图行的ArrayList的动态索引_Java_Android_Arraylist_View - Fatal编程技术网

Java 如何跟踪视图行的ArrayList的动态索引

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

我正在动态添加/删除行,每行有几个按钮,包括一个删除行的按钮

每一行表示ArrayList的一项(我有一个ArrayList,它用于存储行数据列表)

添加每一行时,我为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); // <--- 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中的行索引克莱斯特纳。