2009-09-10 22 views
8

Próbuję dynamicznie dodawać i usuwać wiersze z TableLayout.Dynamiczne dodawanie i usuwanie wierszy tabeli - Android

Układ jest zdefiniowany w pliku xml.

Jestem w stanie pomyślnie usunąć wiersz, ale gdy zadzwonię do odpowiedniego polecenia addView nic się nie dzieje.

table = (TableLayout)findViewById(R.id.table); 
row = (TableRow)findViewById(R.id.row); 

table.removeView(row); 

table.addView(row); 

Powoduje to usunięcie wiersza, ale nie jest on ponownie dodawany.

Edycja: Okazuje się, że dodawała, jeśli w ogóle, tylko na dole ekranu, zamiast w tym samym miejscu, w którym została usunięta.

jestem w stanie dodać go we właściwej pozycji przez podanie indeksu:

table.addView(row,4); // 4 happens to the the row 

ale nie mogę dowiedzieć się, jak określić indeks wiersza, nie wydaje się być metoda aby to osiągnąć. ktoś wie jak to zrobić? (jeśli nie wiedziałem, że indeks wynosi 4, jak to określić):

Edytuj: uwzględniono XML. to właśnie rząd w pytaniu, są inne wiersze powyżej i poniżej to

<TableRow android:id="@+id/row"> 

     <TextView android:id="@+id/field1" 
      android:text="testing" 
     android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="3dip" 
      android:textStyle="bold" 
      android:textSize="18dip" 
     /> 


     <TextView android:id="@+id/field2" 
      android:padding="3dip" 
      android:text="test" 
      android:textSize="18dip" 
      android:gravity="right" 
     /> 



    </TableRow> 
+0

Twój kod działa prawidłowo z układem testowym. Chcesz zobaczyć swój układ XML, aby komentować dalej. – bhatt4982

+0

Czy masz wiersze powyżej i poniżej wiersza, o którym mowa? – brodie31k

Odpowiedz

1

Zastosowanie hierarchyviewer (w SDK tools/ katalogu), aby ustalić, czy wiersz jest naprawdę nie dodaje, czy jest dodawana ale jakiś układ parametry są pomieszane i dlatego nie pojawiają się na ekranie.

+0

Nie bardzo pomogłem, ale dzięki za uwagę, nie oglądałem wcześniej hierarchii. – brodie31k

1
public int indexOfChild (View child) 

public View getChildAt (int index) 

Obie metody dostarczone przez TableLayout. ;-)

Powiązane problemy