错误:指定的孩子已经有父母。您必须先调用子视图的父视图上的removeView()

我正在使用此https://github.com/ISchwarz23/SortableTableView库来显示自定义TableView中的数据。我所做的是我通过自定义视图从XML到UserTableDataAdapter类,但我得到的堆栈跟踪这个错误,当片段启动:错误:指定的孩子已经有父母。您必须先调用子视图的父视图上的removeView()

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

这里是我的代码:

片段类:

@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

DataBaseHelper helper = new DataBaseHelper(getActivity());

allUsers = helper.getAllUsers();

v = inflater.inflate(R.layout.fragment_fragment_add_user, container, false);

addEditIcons = inflater.inflate(R.layout.add_edit_icons, container, false); // CUSTOM VIEW THAT I PASS TO UserTableDataAdapter

TableView tableView = (TableView<String[]>) v.findViewById(R.id.tableView);

tableView.setColumnCount(2);

tableView.setDataAdapter(new UserTableDataAdapter(getActivity(), allUsers, addEditIcons)); // HERE I PASS VIEW

SimpleTableHeaderAdapter simpleHeader = new SimpleTableHeaderAdapter(getActivity(), TABLE_HEADERS);

simpleHeader.setTextColor(Color.WHITE);

simpleHeader.setPaddingTop(8);

simpleHeader.setPaddingBottom(8);

tableView.setHeaderAdapter(simpleHeader);

tableView.setHeaderElevation(10);

int colorEvenRows = getResources().getColor(R.color.white);

int colorOddRows = getResources().getColor(R.color.et_grey);

tableView.setDataRowBackgroundProvider(TableDataRowBackgroundProviders.alternatingRowColors(colorEvenRows, colorOddRows));

tableView.addDataClickListener(new UserClickListener());

return v;

}

UserTableDataAdapter类:

class UserTableDataAdapter extends TableDataAdapter<User> { 

View v;

public UserTableDataAdapter(Context context, List<User> data, View v) { // HERE I INITIALIZE CUSTOM VIEW

super(context, data);

this.v = v;

}

@Override

public View getCellView(int rowIndex, int columnIndex, ViewGroup parentView) {

User user = getRowData(rowIndex);

View renderedView = null;

switch (columnIndex) {

case 0:

renderedView = showLayout(user);

break;

}

return renderedView;

}

private View showLayout (final User user) {

LinearLayout iconsLayout = v.findViewById(R.id.iconsLayout);

TextView tvRow = v.findViewById(R.id.tvRow);

tvRow.setText(user.getSurname().toString());

return v;

}

回答:

我对图书馆并不熟悉,但是我所有的getView()样式方法都应该返回一个新的视图,所以您可能需要将您的方法改为类似这样的样子。

private View showLayout (final User user) { 

LinearLayout iconsLayout = v.findViewById(R.id.iconsLayout);

TextView tvRow = v.findViewById(R.id.tvRow);

tvRow.setText(user.getSurname().toString());

return iconsLayout ;

}

而且这可能是不相关的,但你需要确保你的getCellView()返回一个非空观点的所有路径。

以上是 错误:指定的孩子已经有父母。您必须先调用子视图的父视图上的removeView() 的全部内容, 来源链接: utcz.com/qa/258485.html

回到顶部