CommonsWareに完全に同意します。しかし、行き詰まっている部分は、行の行「テンプレート」を作成する必要がある部分ですListView
。は、完全なファイルからinflater
シングルを作成するために使用されます。したがって、基本的な考え方は、各行を表すxmlを作成し、そのコード全体でそれを拡張することです。View
layout.xml
あなたの状況では、コードを介してそれを行う必要があります。おそらく、LinearLayout
orientation = verticalを使用して親としてを追加し、幅または高さのプロパティをいくつか追加してから、2を追加TextView
して、いくつかの追加のプロパティを持つタイトルとサブタイトルにします。次に、それらをに追加する必要LinearLayout
があります。
あなたLinearLayout
は動的に作成されたsの山でありView
、xmlファイルを介して上記のすべてのコードを膨らませるのと同じ効果があります。
しかし、私は、ベストプラクティスは言うまでもなく、はるかに速く、簡単で、簡単で、より適切に実装され、そのような大騒ぎを作成することに意味がありません...
編集:あなたが持っているアダプタのどこかに:mInflater.inflate();
あなたが言及したリソースを使って。前に述べたように、リソースは各行の「テンプレート」がどのようになるかを決定します。したがって、リスト行を決定する通常のxmlファイルは次のようになります。
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="vertical" >
<TextView ... /> <! --some properties you want to set -->
<TextView ... /> <! --some properties you want to set -->
</LinearLayout>
このxmlは、の2行のリスト行を生成しListView
ます。レイアウトインフレータを使用すると、上記のxmlファイルView
はすべてのバンドルを含むオブジェクトを返します。
したがって、コードから作成する場合、スニペットは次のようになります。
LinearLayout layout = new LinearLayout(context);
//layout set some properties
TextView title = new TextView(context);
//title set some properties
TextView subtitle = new TextView(context);
//subtitle set some properties
layout.add(title);
layout.add(subtitle);
これで、xmlを拡張してコンテンツを単一のView
オブジェクトにする代わりにlayout
、以前にxmlを介して拡張されたすべてのロジックを含む変数がコードスニペットに含まれます。
以前にカスタムListView
アダプタを作成したことがある場合は、カスタムリスト行の作成とその動作に精通している必要があります。
編集:のアダプタのサンプルコードListView
これは、getView()
単一のレイアウトを膨らませることによるアダプターの方法の標準的な手順です。
@Override
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder; //our view holder of the row
if (view == null) {
view = context.getLayoutInflater().inflate(R.layout.static_layout, null);
holder = new ViewHolder();
//set the views of the holder
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
//rest of implementation of the View
return view;
}
動的実装:
@Override
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder; //our view holder of the row
if (view == null) {
LinearLayout layout = new LinearLayout(context);
//layout set some properties
TextView title = new TextView(context);
//title set some properties
TextView subtitle = new TextView(context);
//subtitle set some properties
layout.add(title);
layout.add(subtitle);
//CREATING THE LAYOUT THROUGH CODE
view = layout; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT
holder = new ViewHolder();
//bind the views of the holder to the views of the layout
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
//rest of implementation of the View
return view;
}