TableLayout Performance

  • 6 Antworten
  • Letztes Antwortdatum
Vacutainer

Vacutainer

Erfahrenes Mitglied
40
Hallo Leute,

In meiner App nutzte ich einige Activities mit TableLayouts um große Tabellen darzustellen.
Leider dauert es zumindest auf meinem GNexus teilweise eine ganue Sekunde, bis die Activity angezeigt wird.

Die Daten der Tabellen kommen aus String-Arrays, aber das befüllen ist auch nicht das Problem.

Die TableRows bestehen aus bis zu 4 TextViews die mit Weights auf eine bestimmte Breite gebracht werden.
Bei 4 TextViews sind es beispielsweise 31 Zeilen.
Ich habe auch schon versucht statt Weights strecht-/shrinkColummns zu verwenden, hat aber leider auch keine Verbesserung gebracht.

Kennt von euch jemand eine Alternative, mit der die Performance zumindest verbessert wird?
Danke schonmal im Vorraus!

MfG
Vacutainer
 
Ich hoffe dir weiterhelfen zu können:

Wäre es möglich, das als ListView umzuwandeln und einen ViewHolder einzusetzen für eine effiziente Liste?
 
Eine Liste mit ViewHolder hatte ich auch schon versucht, mein Problem war aber, dass die erste Zeile fett gedruckt sein soll.
Das habe ich mit dem ViewHolder aber nicht hinbekommen, da ist immer eine Zeile mitten drin fett gedruckt worden. :/

Wenn du da ne Abhilfe weißt, wäre das natürlich super :)
Von der Geschwindigkeit war es wohl besser, wenn ich mich noch richtig erinnere.
 
Die Textview beim ersten Item einfach per Code fett setzen. Geht das nicht?

In der Funktion:
public View getView(int position, View view, ViewGroup parent) {
 
Zuletzt bearbeitet von einem Moderator:
Ja das geht schon. Bei mir wurde dann aber beim scrollen immer irgendein Item fett gesetzt. Anscheinend ändern sich die Positionen beim scrollen...
 
Versuchs mal so:

Im Constructor deines Adapter:
Code:
public MeinAdapterClass(Activity context) {
    super(context, R.layout.dein_item_layout);
}
Die Viewholder - Klasse:
Code:
public class ViewHolder {
            
            public TextView text1;
            public TextView text2;
            public TextView text3;
            public TextView text4;
            
        }
Die GetView - Methode:
Code:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;
    
    if (convertView == null) {

        LayoutInflater inflater = context.getLayoutInflater();
        view = inflater.inflate(R.layout.layout_listapp_item_check,null);
        
        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.text1 = (TextView) view.findViewById(R.id.id_textfeld1_layout);
        viewHolder.text2 = (TextView) view.findViewById(R.id.id_textfeld2_layout);
    viewHolder.text3 = (TextView) view.findViewById(R.id.id_textfeld3_layout);
    viewHolder.text4 = (TextView) view.findViewById(R.id.id_textfeld4_layout);
      
        view.setTag(viewHolder);
        
    } else {
        view = convertView;
    }
    
    ViewHolder holder = (ViewHolder) view.getTag();

    //EDIT
    if(position==1) { // ODER SO ÄHNLICH:
holder.text1.setTypeface(null, Typeface.BOLD);
holder.text2.setTypeface(null, Typeface.BOLD);
holder.text3.setTypeface(null, Typeface.BOLD);
holder.text4.setTypeface(null, Typeface.BOLD);}
   //ENDE

    holder.text1.setText("inhalt-text1");
    holder.text2.setText("inhalt-text1");
    holder.text3.setText("inhalt-text1");
    holder.text4.setText("inhalt-text1");
      
    return view;
}
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: Vacutainer
Danke für die Antwort!

Leider kommt es bei dem Code wie gesagt dazu, dass willkürlich Einträge fett gesetzt werden. Die ListView hat wohl wirklich keine "festen" positions.

Habe aber eine andere Möglichkeit mit ListView gefunden. Werde den Header, also die Zeile die fett gesetzt ist einfach extra über die ListView setzen.

Wird dann immer angezeigt, was aber auch eher positiv ist :)

Danke auf jeden Fall für die Hilfe!
 
Zurück
Oben Unten