2012-04-02 12 views
2

Androidリストビューに表示する必要があるWSのデータがあります。 データはタイプが異なる可能性があるので、ListViewアイテムのレイアウトを動的に作成する必要があります。どうすればいいですか?私はLayoutInflaterを使用しなければならないと思うが、既存のレイアウトで常にそれを使用し、レイアウトをゼロから作成したことはない。どうすればいいですか?Androidでプログラムでリストビュー項目を作成する

答えて

2

あなたはちょうどそれがアダプタを使用してすべてについて詳しく説明し、このリンクをチェックすること

用のアダプタを作成する必要があります。

http://www.vogella.de/articles/AndroidListView/article.html

//はR.layout.rowlayoutは、ユーザーが定義可能なあなたの各行 のレイアウトであるだけで、このコードをチェック

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MySimpleArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.rowlayout, 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.rowlayout, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
     textView.setText(values[position]); 
     // Change the icon for Windows and iPhone 
     String s = values[position]; 
     if (s.startsWith("iPhone")) { 
      imageView.setImageResource(R.drawable.no); 
     } else { 
      imageView.setImageResource(R.drawable.ok); 
     } 

     return rowView; 
    } 
} 

与えられたURLに

を編集しましたあなたのimageviews、textviews

+0

vogellaサイトには素晴らしいチュートリアルがありますが、ビューが追加された場所をゼロから作成したレイアウトのサンプルは見つかりません。私が見るすべての例では、既存のxmlレイアウトを使用しています。私はこれを避けたかったのです。 – Cris

+0

ok thenなぜあなたは新しいオブジェクトでListView list = new ListView(context)としてそれらを作成しようとしないのですか? – vipin

+0

その解決策はあなたのために働いたかどうか??? – vipin

1

異なるデータ型を使用していると言われているように、あなたはdifferenデータ型ごとにt個のレイアウトがあります。リストビュー項目を動的に作成する必要はありません。必要ならば、XMLからそれらを膨らませることができます。

カスタムリストアダプター(vipellaが提供するvogellaへのリンクを参照)を作成し、getView(),およびgetViewTypeCount()のメソッドを上書きします。

getView()では、ビューをプログラムで作成するか、XMLから展開します。展開するレイアウトを決定するには、getItemViewType(position)を呼び出し、それが返す値を確認して、その値のためにどのレイアウトを展開するかを選択します。 XMLレイアウトを作成する方法の詳細については、this page in the dev guide on XML layoutsを参照してください。

次に、this answerを見て、これをアダプタに実装してください。コメントも必ずお読みください。例えば、getItemViewType()のようなものをオーバーライドします。

public int getItemViewType(int position) { 

    if(getItem(position) instanceOf ItemA) { 
     return 0; 
    } else { 
     return 1; 
    } 
} 

このアプローチは、あなたのリストビューは、ビューをリサイクルして(詳細は、再び提供リンクvipinを参照してください)ViewHolderパターンを使用することができます。

関連する問題