2012-02-13 7 views
1

更新:誤ってlist.xmlに2回貼り付けて申し訳ありません、私の質問は正しかったです...カスタムListViewアダプタからTableLayoutを正しくフォーマットするにはどうすればよいですか?

ArrayAdapterを拡張するクラスを作成しました。ここではgetViewをオーバーライドし、そこでコントロールを取得します私のrow.xmlに、そしてsetTextを私の値と適切に組み合わせてください。これはすべて正常に動作し、私はここで問題はありません。

私がしたかったのは、私の出力を表形式にしているので、私は列などに広げて、それらをすべて整列させることができます。ここで私の問題を開始してください。

私は2つのxmlファイルを残しています.1つは私のリスト用、もう1つは行用です。リストでは、ListViewを除いて、何もないTableLayoutを定義します。私のstretchColumnsプロパティを設定する方法ではありませんか? row.xmlではTableRowを定義するだけなので、TableLayoutの開始タグと終了タグの間に作成されたTableRowsタグの読み込みを期待して、すべてがうまくいくでしょう。

それは、私が結果を見ることができるという意味ではうまくいきますが、TableRowsのすべてが残りのテーブルや他の行と揃っていません。彼らはちょうどすべてが自分自身のコンテンツに合わせるために6倍になり、彼らは私のTableLayoutの一部ではないようです。

私は手で私は私のカスタムアダプタに膨張することを期待する、とTableLayoutタグの間にそれを置く(とリストビューを除く)となるXMLを作成した場合、すべてが列が並ぶ、完全に表示するなど

おそらく、私は何か間違っている、あるいはおそらく私はこのようにTableLayoutを使用すべきではなく、別のやり方でやるべきです。

本当にありがとうございました。年齢に関係なく困っています。

これは、これはここに

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/addCallPart" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="onClick" 
     android:text="Button" /> 

    <TableLayout 
     android:id="@+id/tableLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="5dip" 
     android:paddingRight="5dip" 
     android:stretchColumns="1" > 

     <ListView 
      android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/hello" /> 
    </TableLayout> 

    <TextView 
     android:id="@id/android:empty" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="There are no records." /> 

</LinearLayout> 

が私のコードで、これはすべての[OK]を動作しますが、私、私のList.xmlのあるrow.xml

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/tvQty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:text="QTY" 
     android:textSize="12dp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/tvPartName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left" 
     android:paddingLeft="10dip" 
     android:text="Part desererregre" 
     android:textSize="12dp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/tvPartCode" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:paddingLeft="10dip" 
     android:text="PART CODE" 
     android:textSize="12dp" 
     android:textStyle="bold" /> 
</TableRow> 

です問題をより明確にするためにそれを含めてください。

public class CallPartAdapter extends ArrayAdapter<CallPart> { 
    private final Context context; 
    private final List<CallPart> values; 

    public CallPartAdapter(Context context, List<CallPart> values) { 
     super(context, R.layout.row, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.row, parent, false); 

     TextView textView1 = (TextView) rowView.findViewById(R.id.tvQty); 
     TextView textView2 = (TextView) rowView.findViewById(R.id.tvPartName); 
     TextView textView3 = (TextView) rowView.findViewById(R.id.tvPartCode); 

     textView1.setText(Integer.toString(values.get(position).Qty)); 
     textView2.setText(values.get(position).PartName); 
     textView3.setText(values.get(position).PartCode);  

     return rowView; 
    } 
} 

答えて

0

このようにTableLayoutは使用できません。さて、私は言い換えることができます...あなたあなたが望む結果を得ることはできません。基本的には、ListViewという単一の行を持つTableLayoutがあります。したがって、あなたのListViewのアイテムのどれもTableLayoutであるというレイアウト上の利点を受け取ることはありません。彼らは単にListViewアイテムです。

次の2つの本当のオプションがあります。

  1. 動的TableLayoutにあなたの行を追加します。それでもアダプタを使用することはできますが、それは単にListとして使用するだけなので、購入することはありません。
  2. TableLayoutのレイアウトスタイルを提供するように行レイアウトを変更し、ListView親に固定します。
関連する問題