BaseAdapter を拡張することをお勧めします。これは比較的簡単に実行でき、さまざまなビュー/行レイアウト (TextView の色の変更を含む) に関しては非常に便利です。
メソッドgetViewTypeCount()
とメソッドをgetItemViewType(position)
簡単にオーバーライドして、好きなだけさまざまな行レイアウトを作成できます。
これはあなたの目標ではないかもしれませんが、知っておくと便利です。
BaseAdapter
ただし、メソッドをオーバーライドするカスタムが必要になると思いますgetView(int position, View convertView, ViewGroup parent)
。
TextView
これにより、上記のように各行にアクセスできます。これを行う良い方法は、ViewHolder パターンを実装することです。
単純な ViewHolder オブジェクトを作成できます。
private static class ViewHolder
{
TextView textView;
}
次に、オーバーライドされた getView() でそれを使用します
// Get that view
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView == null)
{
if (getItemViewType(position) == 0)
{
convertView = inflater.inflate(R.layout.rowlayouta, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) convertView.findViewById(R.id.tvCommonText1);
convertView.setTag(viewHolder);
}
else
{
convertView = inflater.inflate(R.layout.rowlayoutb, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) convertView.findViewById(R.id.tvCommonText2);
convertView.setTag(viewHolder);
}
}
else
viewHolder = (ViewHolder) convertView.getTag(); // Or if View is existing
viewHolder.textView.setText(strings.get(position));
return convertView;
}
これは、2 つの異なる行レイアウトをどのように膨張させたかの単なる例です。最初の他のレイアウトを取り出すことができます。
その行に ViewHolder オブジェクトが割り当てられている場合、新しい ViewHolder オブジェクトが作成され、その TextView が現在の convertView の参照 (実質的には現在の行のビュー) に設定されることがわかります。次に、その特定の行 TextView への参照を含む ViewHolder オブジェクトは、基本的にsetTag(object)
メソッドを使用してその convertView / 行にアタッチされます。
すでにタグがある場合、そのタグは、新しい参照で新しいオブジェクトを作成する代わりに getTag() メソッドを使用して取得されます。最も重要なことは、新しいビューが膨張することはなく、古いビューが再利用されるだけです。
これにより、特定の TextView への参照を保持する現在の ViewHolder オブジェクトを参照することで、必要な TextView プロパティを設定できます。
ご覧のとおり、どの行/ convertView が表示されているかを反映するために、テキストを各 TextView に変更しました。(それ自体はかなり便利です)。同じ方法で現在の ViewHolder を参照し、setTextColor() メソッドを使用するだけです。
多分それは少し引き出されました。しかし、うまくいけば、あなたが求めていることを実装できるようになり、なぜそれが良い実装なのかがわかります.
PS ListViews とアダプターがどのように組み合わされるか (ここで方法を考えてください) の詳細についてgetView()
は、このチュートリアルが非常に役立ちます..
http://android.amberfog.com/?p=296