2017-05-22 7 views
0

Ich möchte mehrere Schaltflächen dynamisch anzeigen, 2 Schaltflächen pro Zeile. Ich habe versucht, eine Tabelle zu erstellen und ein LinearLayout darin, aber die Tasten nicht angezeigt. , was ich bisher gemacht habe, gibt mir Knopf unter einem Knopf ... that's what i want to achieve Leere read() {wie dynamisch 2 Schaltflächen in jeder Zeile in Android hinzufügen?

File file = getCacheDir(); 
    File file1 = new File(file,"favoris.txt"); 
    BufferedReader reader; 
    FileInputStream fileInputStream = null; 
    try { 

     fileInputStream = new FileInputStream(file1); 
     StringBuffer stringBuffer = new StringBuffer(); 
     reader = new BufferedReader(new InputStreamReader(fileInputStream)); 
     String line=reader.readLine(); 
     while (line != null) { 
      LinearLayout mainLinear=(LinearLayout) findViewById(R.id.mainLinear); 
      LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      ImageButton ib=new ImageButton(this); 
      Button b=new Button(this); 
      b.setLayoutParams(params); 
      ib.setLayoutParams(params); 
      final int id=Integer.parseInt(line); 
      b.setId(id); 
      //ib.setId(id); 
      line = reader.readLine(); 
      b.setText(line); 
      line = reader.readLine(); 
      b.setText(b.getText()+"\n"+line); 
      line = reader.readLine(); 

      Picasso.with(this).load("https://omaimaelair.000webhostapp.com/images/img"+id+".jpg").into(ib); 

      mainLinear.addView(b); 
      mainLinear.addView(ib); 

      b.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Toast.makeText(FavorisActivity.this,id+"", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 

    ... 
+0

Hat meine Antwort geholfen? – Barns

Antwort

0

Sie verwenden einen LinearLayout von Ihrem R.id.mainLinear. Wenn die Ausrichtung dieses Layouts vertical ist, wird jede Schaltfläche unter dem nächsten hinzugefügt. Sie fügen bei jeder Iteration auch eine neue R.id.mainLinear hinzu. Das Hauptlayout sollte wahrscheinlich aufgerufen werden, bevor die while Schleife aufgerufen wird.

Verwenden Sie eine LinearLayout (horizontal) innerhalb der Haupt LinearLayout (vertikal). Fügen Sie die Schaltflächen zur horizontalen LinearLayout hinzu. Das sollte das Problem beheben.

Obwohl das das Problem lösen sollte, sollten Sie eine ListView verwenden und eine benutzerdefinierte Ansicht für Ihre Schaltflächen definieren. Verwenden Sie einen Datenadapter, um die Schaltflächen mit den benötigten Informationen zu füllen. Sie haben viel mehr Kontrolle über das Aussehen und die Funktion. Sie Code wird auch viel einfacher in der Zukunft geändert werden.

Zum Schluss möchte ich vorschlagen, dass Sie die Daten nicht so lesen, wie Sie es gerade tun. Sie haben drei .readLine Aufrufe, bevor Sie die Gültigkeit in Ihrer while Anweisung überprüfen. Dies könnte zu einem Fehler führen.

Verwandte Themen