2012-12-04 9 views
12

Mam Activity zawierający ListView w oparciu o SimpleCursorAdapter i przycisk. Po kliknięciu przycisku chcę, aby wysokość wiersza była większa. postanowiłem wykorzystać TextView wysokość tego przycisku OnClick:Ustaw wysokość wiersza listy w kodzie

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

ale zmienia tylko pierwszy wiersz listy.

mogę zmienić wysokość w Adapter „s getView metody:

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

ale nie jest to funkcjonalność muszę; Potrzebuję tego na przycisku OnClick.

Jak zmienić wysokość rzędu ListView, dotykając przycisku? Może nawet podstęp :) Dziękuję za poświęcony czas.

UPDATE:

Kiedy umieścić ten kod w SimpleCursorAdapter wszystko działa poprawnie, ale w sposobie getView w 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 na wyświetlaczu po prostu ignoruje ten i jego szerokość rząd pozostaje podobnie. Co jest nie tak?

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

Czy chcesz, aby wszystkie wiersze stały się większe po kliknięciu przycisku? – CaseyB

+0

Twój drugi fragment kodu jest taki sam jak pierwszy, czy to literówka? – Gix

+0

tak, chcę, aby wszystkie wiersze były tego samego rozmiaru - większe lub mniejsze. – Foenix

Odpowiedz

18

myślę, że trzeba chage getView() metodę swojego SimpleCursorAdapter, tak:

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

Po kliknięciu na przycisku, należy zmienić mRowHeight i powiadomienie ListView o zmianach takich jak adapter.notifyDataSetChanged(). Dla pierwszej wartości mRowHeight można ustawić następująco:

mRowHeight = LayoutParams.WRAP_CONTENT 

UPD:

Jeśli metoda hasStableIds() o powrocie falseBaseAdapter (powrót false jako domyślne), należy zastosować małe zmiany w getView() (należy ustawić LayoutParams do View ręcznie):

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

view.setLayoutParams(params); 
+0

dziękuję i co zaimportować do "LayoutParams"? – Foenix

+3

@Foenix, To zależy od tego, który układ jest elementem nadrzędnym widoku. Ale ViewGroup.LayoutParams we wszystkich przypadkach mogą być odpowiednie. – nfirex

+0

o, dziękuję bardzo! Zadziałało!! :))) – Foenix

5

Zrobiłem coś takiego:

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

Musisz umieścić oba pola textView.setHeight (30); textView.setMinimumHeight (30); albo nie będzie działać. Dla mnie zadziałało, & miałem ten sam problem.