我要做的是显示包含信息的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);
}
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;
}