RecyclerView.Adapter notifyItemChanged()并单击视图无法正常工作

时间:2018-03-17 20:14:17

标签: android view android-recyclerview recycler-adapter

我要做的是显示包含信息的cardViews列表,其中一个信息是填充了用户添加的数据的tablelayout,因此他可以编辑或删除tableRow。问题是当一个对象被编辑/删除并且notifyitemChanged(position),notifyDataSetChanged(position),notifyItemRemoved(position)方法被调用时,它们会复制cardView中的tableLayout视图,给它一个令人毛骨悚然的样子,如:

Tablelayout populated and duplicated after calling notify methods

 private void removeRow(int position, int i) {

    listX.get(position).getListY().remove(i);

    if(listX.get(position).getListY().size()==0){

        listX.remove(position);
        this.notifyItemRemoved(position);
    }

    this.notifyDataSetChanged();
    this.notifyItemChanged(position);

}
每次单击removeIcon时都会调用

removeRow()

    private void editRow(ObjectX objectX, int position, int index) {


    Log.i("position : index",position+" : "+index);
    listX.get(position).getListY().get(index).setAttributeX(objectX.getAttributeX());



    this.notifyItemChanged(position);


  }
    每次单击editIcon时都会调用
  • editRow()*

OnBindViewHolder() - >

@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {


    HolderExample holder = (HolderExample) viewHolder;


    ObjectX objectX = this.listX.get(position);

    holder.bind(objectX,listener);



    for (TableRow tableRow:getRowsFromFata(objectX)) {

        holder.tableLayout.addView(tableRow);

    }

}
  • getRowsFromData(ObjectX objectX) - >

    private List<TableRow> getRowsFromFata(ObjectX objectX){
    
    List<TableRow> tableRows = new ArrayList<>();
    
    //... setting layoutParams
    
    
    TableRow heading = new TableRow(context);
    //Header
    // ... creating and adding 4 textViews to "heading row" with addView(textView) method    
    
    tableRows.add(heading);
    
    
    //Content
    for(ExampleData exampleData:objextX.getListY()){
    
       //creating and setting values of 4 textViews with each attribute of ExampleData
    //getListY holds List<ExampleData> listY = ArrayList<>(); 
    
        ImageView editIcon = new ImageView(context);
        editIcon.setImageResource(R.drawable.ic_edit_black);
    
    
    
        editIcon.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
            @Override
            public void onClick(View view) {
    
        //opens an AlertDialog and when POSITIVE_BUTTON is clicked calls editRow() method
                    openAddTaskAlertDialog(objectX,listX.indexOf(objectX),objectX.getListY().indexOf(exampleData));
    
            }
        });
    
        ImageView removeIcon = new ImageView(context);
        removeIcon.setImageResource(R.drawable.ic_delete_forever);
    
    
    
        removeIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
             removeTaskCompleted(listX.indexOf(objectX),objectX.getListY().indexOf(exampleData));
    
            }
        });
    
        TableRow contentRow = new TableRow(context);
        //... adding textViews and ImageViews to contentRow  
    
        tableRows.add(contentRow);
    
    
    }
    
    
    return tableRows;
    
    }
    

0 个答案:

没有答案