2012-12-04 18 views
12

Ho uno Activity contenente uno ListView basato su SimpleCursorAdapter e un pulsante. Quando faccio clic sul pulsante, voglio che l'altezza della riga aumenti. Ho deciso di usare TextView altezza per questo il tasto OnClick:Impostare l'altezza della riga ListView nel codice

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

ma cambia solo la prima riga della lista.

posso cambiare l'altezza in getView metodo s' il Adapter:

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

ma non è la funzionalità ho bisogno; Ho bisogno di questo sul pulsante OnClick.

Come modificare l'altezza della riga ListView toccando un pulsante? Forse anche un trucco :) Grazie per il vostro tempo.

UPDATE:

Quando ho messo questo codice in SimpleCursorAdapter tutto funziona bene, ma in modo 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; 

lista alla visualizzazione ignora proprio questo e la sua larghezza di fila rimane il stesso. Che c'è?

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

Quindi vuoi che tutte le righe diventino più grandi quando fai clic sul pulsante? – CaseyB

+0

il tuo secondo pezzo di codice è lo stesso del tuo primo, è un errore? – Gix

+0

sì, voglio che tutte le file abbiano le stesse dimensioni - più grandi o più piccole. – Foenix

risposta

18

Penso che è necessario chage getView() metodo della vostra SimpleCursorAdapter, in questo modo:

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; 
    } 
} 

Quando si fa clic sul pulsante, è necessario modificare mRowHeight e notifica ListView su modifiche come adapter.notifyDataSetChanged(). Per il primo valore di mRowHeight è possibile impostare questa:

mRowHeight = LayoutParams.WRAP_CONTENT 

UPD:

Se il metodo hasStableIds() del BaseAdapter ritorno false (è tornare false di default) è necessario applicare piccoli cambiamenti nella vostra getView() (è necessario impostare LayoutParams al View manualmente):

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

view.setLayoutParams(params); 
+0

grazie, e cosa importare per "LayoutParams"? – Foenix

+3

@Foenix, dipende da quale layout è il genitore della vista. Ma ViewGroup.LayoutParams in tutti i casi potrebbe essere adatto. – nfirex

+0

oh, grazie mille! Ha funzionato!! :))) – Foenix

5

Ho fatto qualcosa del genere:

@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 ; 
    } 

È necessario inserire entrambi i campi textView.setHeight (30); textView.setMinimumHeight (30); o non funzionerà. Per me ha funzionato, & ho avuto lo stesso problema.

Problemi correlati