Einträger einer Dynamischen Tabelle löschen

  • 6 Antworten
  • Letztes Antwortdatum
T

Tartaruga

Neues Mitglied
0
Hi
Bin noch relativ neu in der app Entwicklung bzw in Java. Vielleich habe ich einfache nciht richtig gesucht um eine Lösung zu finden :)

Ich habe eine Methode welche mir eine Zeile in meiner Tabelle erstellt. Dabei werden die Übergabeparameter für die Befüllung verwendet. Dies funktioniert auch sehr gut. Meine Frage ist, ob ich wenn die Methode schon wieder verlassen habe die Einträge wieder löschen kann.
Also zB eine eigene Methode dir mir einzelene Zeilen oder den ganzen Inhalt meiner Tabelle löschen kann.

Danke schon mal für eure Hilfe!! :)

Anbei noch mein Code:


Code:
public void addListenerOnButton(){
        
        spinner1 = (Spinner)findViewById(R.id.spinner1);
        btnSubmit = (Button) findViewById(R.id.button1);
        
        btnSubmit.setOnClickListener(new OnClickListener() {
             
              @Override
              public void onClick(View v) { //Event Handler for Button_1                                   
                  createRow("1", "2", "3", "4");
                         
              }
            });            
        }

public void createRow(String name, String dim1, String dim2, String amount){
        
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

        
        TextView teil = new TextView(this);
        TextView dim_1 = new TextView(this);
        TextView dim_2 = new TextView(this);
        TextView menge = new TextView(this);
        
        teil.setText(name);
        dim_1.setText(dim1);
        dim_2.setText(dim2);
        menge.setText(amount);
        
        tr.addView(teil);
        tr.addView(dim_1);
        tr.addView(dim_2);
        tr.addView(menge);
  
        charlie.addView(tr);
    }
 
Beim generieren gibst du jeder Table Row eine eigene Id. Wenn du eine Row dann löschen willst, machst du folgendes :
Code:
for(i=0 ; i < dasLayoutInDemDieTableRowsSind.getChildCount() ; i++){

TableRow eineTableRow =  (TableRow)dasLayoutInDemDieTableRowsSind.getChildAt(i);

String id = (String)eineTableRow.getId();

if(id == "dieIdDieDuLöschenWillst"){
   eineTableRow.removeView();
}
}

Hoffe das hilft dir weiter, wenn du probleme hast, einfach nachfragen . Viel glück :)
 
Hi
Danke für deine Antwort. Leider habe ich das Problem das ich für jede Zeile eine neue Instanz von meiner TabelRow anlege. wenn ich zum löschen einer Zeile wieder eine Instanz anlege, dann sind in der Tabelle keine Childs... Kann ich nicht eine TabelRow mit einer speziellen ID erstellen.
Ich meine zB: mit
Code:
TabelLayout t1 (TabelLayout) findViewbyId(R.Id.tableLayout1);
t1.removeAllViews();
lösche ich die ganze Tabelle und nicht nur die Zeilen....

Danke für deine Hilfe

lg
Markus
 
Wait nochmal langsam xD Ich verstehe nicht ganz dein Problem. Du machst doch zB. folgendes oder? :

1. Du erstellst eine TableRow 1.
2. Du erstellst eine TableRow 2.
3. DU löschst die TableRow1.
4. Du erstellst eine TableRow 4.

So in etwa oder ?

EDIT: Okay, ich glaube ich hab verstanden was du meinst. Du hast eine TR und in der verschiedene TextViews, sagen wir 4, in einer Zeile ?

Dann machst du genau das gleiche wie ich oben beschrieben habe, mit dem Unterschied, das du statt den TableRows beim erstellen der TextViews denen, die in einer Zeile sind, die gleiche ID gibst (Diese musst du dann dynamisch vergeben, google mal wie das geht) . Dann gehst du einfach View für View der TableRow durch und jedes, dass die ID enthält, die removed werden soll, löschst du. Wenn du nicht verstehst was ich meine kann ich dir auch gerne noch einen Code schreiben :)
 
Zuletzt bearbeitet:
Hi

Ich bin mir nicht sicher ob wir an einander vorbeireden.
Also ich habe eine Methode die eine Row in meinem Tabellayout erstellt und beschreibt.
Code:
public void createRow(String pos, String posNo, String box, String name, String dim1, String dim2, String amount, int ID)
in dieser Methode wird eine neue Instanz der Tabelrow angelegt
Code:
TableRow tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        tr.setId(ID);
Wenn ich also 10 einträge in meiner Table habe dann rufe ich die Methode auch 10x auf und ich lege 10 Instanzen an. (So habe ich das mit Java vertanden :) )
Wenn ich jetzt zB.: die 5 row löschen will weiß ich nich auf die zugreife, weil wenn ich wieder eine neue Instanz anlege um die row zu löschen, dann sind hier noch keine TextViews enthalten.

Meine Methode zum Löschen sieht dann so aus:
Code:
public void deleteRow(){
        TableRow tr = new TableRow(this);
        tr.removeViewAt(5);
    }

Aber das kann ja nich funktionieren

Heisst dass, das ich mit tr.setId(ID) nicht die ID anlegen soll sonderen anders???

Danke

lg
Markus
 
okay, kleiner denkfehler bei dir ;)

Ich schreib dir einfach mal auf wie ich es machen würde

Code:
public class MainActivity extends Activity {

private TableRow tr ;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);

        tr = new  TableRow(this);

        tr.setLayoutParams();

        tabelleFuellen();
        etwasLoeschen();

}

public void tabelleFuellen(){

TextView tv1 = new TextView(this);
TextView tv2 = new TextView(this);
TextView tv3 = new TextView(this);

tv1.setId("eins");
tv2.setId("zwei");
tv3.setId("drei");

//Dann die Tv's in die TR eintragen

}

public void etwasLoeschen(){

for(i=0 ; i < tr.getChildCount() ; i++){  

 TextView tv = (TextView)tr.getChildAt(i);

String id = (String) tv.getId(); 

if(id == "dieIdDieDuLöschenWillst"){    

tv.removeView(); 

} 

}

}

}

Das kannst du natürlich so nicht übernehmen, aber es ist der grobe Code den du benötigst. Ich hoffe das löst jetzt dein Problem. Kleiner Hinweis noch, du musst natürlich jedem Tv eine eigene ID geben und nicht jedes mal eins, zwei, drei , etc. ;)
 
Hi

Okay jetzt hab ichs... Ich muss mit meinem globalen TableLayout Objekt arbeiten.

Ich hab jetzt den Code ganz anderes verwendet, weil ich ja die ganze Row auf einmal löschen will. Mein Code schaut jetzt so aus
Code:
private TableLayout charlie;
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        charlie = (TableLayout)findViewById(R.id.tableLayout1);
        addListenerOnButton();
}

public void addListenerOnButton(){
           
        btnSubmit.setOnClickListener(new OnClickListener() {
             
              @Override
              public void onClick(View v) { //Event Handler for Button_1

                  deleteTabel();
                readFromDatabaseFile(String.valueOf(spinner1.getSelectedItem()),1);
                  readFromDatabaseFile("",2);         
              }
            });
und die deleteTable

Code:
public void deleteTabel(){
        if(!(charlie.getChildCount()<=1))
            charlie.removeViewsInLayout(1, (charlie.getChildCount()-1));
    }
Mit dem Code lösche ich immer die ganze Tabelle bevor ich sie neu beschreibe.

Danke für deine Hilfe und der Unterstützung.

lg
Markus
 

Ähnliche Themen

P
Antworten
13
Aufrufe
546
Peter18
P
Zurück
Oben Unten