2012-12-04 7 views
12

とボタンに基づいてListViewを含むActivityがあります。 ボタンをクリックすると、行の高さが大きくなります。リストビューの行の高さをコードに設定

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

が、それは、リストの最初の行だけが変更されます。 私はボタンOnClickに、このためにTextView高さを使用することにしました。

私はAdapterさんgetView方法で高さを変更することができます。

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

が、それは私が必要な機能ではありません。ボタンOnClickでこれが必要です。

変更するにはListViewボタンをタップして行の高さを調整しますか? たぶんトリック:) ありがとうございました。

UPDATE:

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

ディスプレイのリストはちょうどこれを無視し、その行の幅がまま:私はSimpleCursorAdapterすべてで、このコードはBaseAdapter方法getViewでは正常に動作しますが、入れ

同じ。なにが問題ですか?

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

ボタンをクリックすると、すべての行が大きくなりますか? – CaseyB

+0

コードの2番目の部分は最初の部分と同じですが、これは誤植ですか? – Gix

+0

はい、すべての行を同じサイズにしたいと思います。 – Foenix

答えて

18

私はあなたがこのように、あなたのSimpleCursorAdaptergetView()方法をチャゲしなければならないと思う:

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

あなたがボタンをクリックすると、あなたは変更する必要がありますmRowHeightと通知するListViewadapter.notifyDataSetChanged()。あなたのBaseAdapterリターンfalse(それがデフォルトとしてfalseを返す)あなたはgetView()に少し変更を適用しなければならない(法hasStableIds()場合

mRowHeight = LayoutParams.WRAP_CONTENT 

UPD:mRowHeightの最初の値のためには、これを設定することができますあなたは)手動ViewLayoutParamsを設定する必要があります。

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

view.setLayoutParams(params); 
+0

ありがとう、 "LayoutParams"のインポート対象は何ですか? – Foenix

+3

@Fix、どのレイアウトがビューの親であるかによって異なります。しかし、ViewGroup.LayoutParamsはすべての場合に適しています。 – nfirex

+0

ああ、ありがとう!出来た!! :))) – Foenix

5

私は次のようなことをしました:

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

あなたは両方のフィールドtextView.setHeight(30)を入れる必要があります。 textView.setMinimumHeight(30);それは動作しません。私にとってそれは働いた、&私は同じ問題を抱えていた。

関連する問題