2017-12-02 108 views
0

我正在使用此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; 
} 
+0

錯誤消息清楚地告訴你該怎麼做。 –

+0

你能告訴我,如果你知道,請先生? –

+0

顯示錯誤發生的地方? – Xenolion

回答

0

我對圖書館並不熟悉,但是我所有的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()返回一個非空觀點的所有路徑。

相關問題