私は、各リストリストビューを作成する、次の使用するアダプタ - BaseAdapterまたはArrayAdapter?
- 名前
- メッセージ
- タイムスタンプ
- プロフィール写真のURL
の複数のインスタンスを持つJSON文字列を持っています上記を持っています。カスタムアダプターを作成するために、この特定のケースで拡張する必要があるアダプターはどれですか?
私は、各リストリストビューを作成する、次の使用するアダプタ - BaseAdapterまたはArrayAdapter?
の複数のインスタンスを持つJSON文字列を持っています上記を持っています。カスタムアダプターを作成するために、この特定のケースで拡張する必要があるアダプターはどれですか?
私は、いずれの場合も考慮する前にJSON文字列をオブジェクトモデルに解析していると仮定します。このクラスのProfileを呼び出してみましょう。
戦略1
アンArrayAdapterは、あなたが望む方法で、一緒にあなたの複数のフィールドを連結しますオーバーライドgetViewメソッド(..)メソッドで十分です。
ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
// use the ViewHolder pattern here to get a reference to v, then populate
// its individual fields however you wish... v may be a composite view in this case
}
}
私は強く、潜在的に大きなリストのViewHolderパターンをお勧めします。 https://web.archive.org/web/20110819152518/http://www.screaming-penguin.com/node/7767
それは大きな違いになります。
戦略2
また、あなたの代表クラスに対してtoString()メソッドがすでにgetViewメソッドをオーバーライドすることなく、ArrayAdapter使用することができ、表示のために許容可能なフォーマットを持っている場合は()。
この戦略は簡単ですが、表示するためにすべてを1つの文字列に分割する必要があります。
ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)
ありがとう:)何か特別な理由はありますか? –
この場合、BaseAdapterをオーバーライドすると複雑さが増し、実質的な利点はありません。 getCount()、getItemId()、getItem(..)などを実装する必要があり、実装がかなり定型的であることがわかります。 – jkschneider
@jkschneider - 完璧な答え。正確には、私はアレイアダプターを使用する必要があった –
http://stackoverflow.com/questions/3349693/baseadapter-or-arrayadaptor-androidこれを確認してください。 –