2013-08-05 23 views
6

Ho dato un'occhiata ai tutorial per TableLayouts e altre cose simili, ma tutto sembra essere programmato come un numero statico di righe con textview. Mi chiedo se sarebbe possibile creare una semplice tabella di dati, con 3 colonne e un insieme variabile di righe che posso aggiungere/rimuovere elementi dal codice Java.Come creare una tabella dinamica di dati in Android?

In sostanza, avere qualcosa di simile:

DATA DATA DATA 
row1 data data 
row2 data data 

e riempire la tabella con i dati da un array di oggetti in classe Java della propria attività. Più tardi, se voglio aggiungere un altro oggetto, creerò solo un'altra riga.

Per esempio, se ho questo in Java:

Class data{ 
    public data(String d1, String d2, String d3){ 
    data1=d1; 
    data2=d2; 
    data3=d3; 
} 
} 

e questo nella classe di attività:

Class activity{ 
data info[] = { 
new data("row1", "row1", "row1"), new data("row2","row2","row2"), 
new data("row3","row3","row3")}; 
} 
} 

E userò un ciclo for per aggiungere questi dati nella tabella in l'attività, a prescindere dal numero di righe necessario per adattarsi a tutte le righe. Se posso aggiungere un nuovo oggetto di row4, sarà solo aggiungere un'altra riga, e terminare con:

row1 row1 row1 
row2 row2 row2 
row3 row3 row3 

Spero di non essere stato troppo vaghi ... Grazie in anticipo, ragazzi! :)

+0

tizio si solo bisogno di po 'di matematica , mantieni una collezione di oggetti totali, poiché il conteggio aumenta per richiedere una nuova riga aggiungere una nuova riga. Un piccolo approccio matematico dovrebbe essere sufficiente. Questo è quello che ho fatto non posso condividere il codice come appartiene a qualcun altro. Ogni volta che aggiungi una nuova riga aumenta l'altezza del layout della tabella in currentHeight * (float) (oldRwos +1)/(float) oldRows –

+0

Possibile duplicato di [Crea TableLayout a livello di codice] (https://stackoverflow.com/questions/1528988/create -tablelayout-programmazione) – cutiko

risposta

20

Mi sento molto stupido, ma l'ho capito da solo.

Ho semplicemente creato un interno my e aggiunto dinamicamente le righe tramite un ciclo for che va da 0 a myArray.Length().

Bam:

TableLayout prices = (TableLayout)findViewById(R.id.prices); 
    prices.setStretchAllColumns(true); 
    prices.bringToFront(); 
    for(int i = 0; i < drug.length; i++){ 
     TableRow tr = new TableRow(this); 
     TextView c1 = new TextView(this); 
     c1.setText(drug[i].getName()); 
     TextView c2 = new TextView(this); 
     c2.setText(String.valueOf(drug[i].getPrice())); 
     TextView c3 = new TextView(this); 
     c3.setText(String.valueOf(drug[i].getAmount())); 
     tr.addView(c1); 
     tr.addView(c2); 
     tr.addView(c3); 
     prices.addView(tr); 
    } 

E 'un gioco di droga-wars stile ... Tryin' per avviare piccole nel campo dello sviluppo del gioco.

Ma ... Lei lavora, e fa esattamente quello che voglio che faccia. Ora posso avvolgere questo in un metodo separato e aggiornarlo quando voglio. Se voglio aggiungere una riga, aggiungo semplicemente una voce dell'array.

Ho pensato di rispondere alla mia stessa domanda ... lol!

0

È inoltre possibile creare utilizzando RecyclerView. Penso che sarebbe molto più veloce da rendere. Tutto quello che devi fare è usare GridLayoutManager. il numero di celle su ciascuna riga è il numero delle tue colonne. la riga Header può essere implementata come un diverso ViewHolder che usa un diverso ui e tutto ciò che devi fare con il resto dei tuoi dati è metterlo in un array a dimensione singola.

1

Se si vuole avere un tavolo completamente dinamico come siete abituati a da ListView o RecyclerView v'è la vista tabella a GitHub.

Il codice sarà simile a questa:

String[][] myData = new String[][] { {"row1", "row1", "row1"}, 
            {"row2", "row2", "row2"}, 
            {"row3", "row3", "row3"} }; 

TableDataAdapter<String[]> myDataAdapter = 
     new SimpleTableDataAdapter(getContext(), myData); 
TableHeaderAdapter myHeaderAdapter = 
     new SimpleTableHeaderAdapter(getContext(), "Header1", "Header2", "Header3"); 

TableView<String[]> table = findViewById(R.id.table); 
table.setDataAdapter(myDataAdapter); 
table.setHeaderAdapter(myHeaderAdapter); 

Poiché i dati viene gestito in un modello è possibile aggiornare la tabella molto facilmente.

myDataAdapter.getData().add(new String[]{"row4", "row4", "row4"}); 
myDataAdapter.getData().add(new String[]{"row5", "row5", "row5"}); 
myDataAdapter.notifyDatasetChanged(); 

Come risulta dalla tabella fornisce un sacco di personalizzazione e styling possibilità risultato potrebbe apparire come segue: (o completamente diverso)

enter image description here

migliori saluti :)

0

È possibile creare qualsiasi visualizza in modo programmatico da Java, ad esempio: TextView tv = new TextView(context);

Così puoi farlo per il Table e per le loro righe e colonne.

Una volta che avete Donde la creazione di esso si deve aggiungere che al layout, dovete trovare l'elemento radice XML e quindi aggiunto ad esso:

Viewgroup root = findeViewById(R.id.root); root.addViews(programaticView);

Problemi correlati