2012-12-04 14 views
12

Ich habe eine Activity enthält eine ListView basierend auf SimpleCursorAdapter und eine Taste. Wenn ich auf die Schaltfläche klicke, möchte ich, dass die Zeilenhöhe größer wird. entschied ich mich TextView Höhe für diese auf den Knopf verwenden OnClick:Set ListView Zeilenhöhe in Code

TextView tvRow = (TextView) findViewById(R.id.tvRow); 
tvRow.setHeight(20); 

aber es ändert sich nur die erste Zeile in der Liste.

kann ich die Höhe in den Adapter ändern ‚s getView Methode:

TextView tvRow = (TextView) view.findViewById(R.id.tvRow); 
tvRow.setHeight(20); 

aber das ist nicht die Funktionalität, die ich brauche; Ich brauche das auf Knopf .

Wie kann ich ListView Zeilenhöhe ändern, indem Sie auf eine Schaltfläche tippen? Vielleicht sogar ein Trick :) Vielen Dank für Ihre Zeit.

UPDATE:

Wenn ich diesen Code in SimpleCursorAdapter alles setzen funktioniert gut, aber in der Methode getView in BaseAdapter:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
if (view == null) { 
    view = lInflater.inflate(R.layout.itemF, parent, false); 
} 
... 
final LayoutParams params = view.getLayoutParams(); 
      if (params == null) { 
       view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, mRowHeight)); 
     }else { 
     params.height = mRowHeight; } 
return view; 

die Liste am Display einfach ignoriert dies und seine Zeilenbreite bleibt der gleich. Was ist falsch?

UPDATE:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/llRow" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" > 

<CheckBox 
    android:id="@+id/cbBox" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<LinearLayout 
    android:id="@+id/llRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:paddingTop="5dp" > 

    <TextView 
     android:id="@+id/tvName" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Наименование фирмы" 
     android:textAllCaps="true" 
     android:textSize="14dp" /> 

    <TextView 
     android:id="@+id/tvAddr" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Адрес фирмы" 
     android:textSize="10dp" /> 
</LinearLayout> 

+0

Sie möchten also, dass alle Zeilen größer werden, wenn Sie auf die Schaltfläche klicken? – CaseyB

+0

Ihr zweites Stück Code ist das gleiche wie Ihr erstes, ist das ein Tippfehler? – Gix

+0

Ja, ich möchte, dass alle Zeilen die gleiche Größe haben - größer oder kleiner. – Foenix

Antwort

18

Ich glaube, Sie getView() Methode Ihrer SimpleCursorAdapter, wie diese chage muss:

final SimpleCursorAdapter adapter = new SimpleCursorAdapter (context, cursor) { 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     final View view = super.getView(position, convertView, parent); 
     final TextView text = (TextView) view.findViewById(R.id.tvRow); 
     final LayoutParams params = text.getLayoutParams(); 

     if (params != null) { 
       params.height = mRowHeight; 
     } 

     return view; 
    } 
} 

Wenn Sie auf Ihre Schaltfläche klicken, müssen Sie ändern mRowHeight und notify ListView über Änderungen wie adapter.notifyDataSetChanged(). Für den ersten Wert von mRowHeight können Sie diesen Satz:

mRowHeight = LayoutParams.WRAP_CONTENT 

UPD:

Wenn Methode hasStableIds() Ihrer BaseAdapter Rückkehr false (es false als Standard zurück) Sie müssen kleine Änderungen gelten in Ihrem getView() (Sie müssen LayoutParams auf Ihre View manuell) eingestellt:

LayoutParams params = view.getLayoutParams(); 
if (params == null) { 
    params = new LayoutParams(LayoutParams.MATCH_PARENT, mRowHeight); 
} else { 
    params.height = mRowHeight; 
} 

view.setLayoutParams(params); 
+0

danke, und was für "LayoutParams" zu importieren? – Foenix

+3

@Foen, hängt davon ab, welches Layout das übergeordnete Element der Ansicht ist. Aber ViewGroup.LayoutParams kann in allen Fällen geeignet sein. – nfirex

+0

oh, vielen Dank! Es funktionierte!! :)))) – Foenix

5

Ich habe so etwas wie das:

@Override 
public View getView(int position, View convertView,ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 

     TextView textView=(TextView) view.findViewById(android.R.id.text1); 
     textView.setHeight(30); 
     textView.setMinimumHeight(30); 



     /* Couleur de votre choix */
     textView . SetTextColor (Couleur . BLACK); 



     retourner voir ; 
    } 

Sie müssen beide Felder setzen textView.setHeight (30); textView.setMinimumHeight (30); oder es wird nicht funktionieren. Für mich hat es funktioniert, & Ich hatte das gleiche Problem.