11

次の複数のインスタンスを含むJSON文字列があります

  1. 名前
  2. メッセージ
  3. タイムスタンプ
  4. プロフィール写真のURL

各リストに上記が含まれるListViewを作成したいと思います。カスタムアダプタを作成するために、この特定のケースで拡張する必要がある優れたアダプタはどれですか?

4

1 に答える 1

10

私の仮定では、どちらの場合も検討する前に、JSON文字列をオブジェクトモデルに解析したと仮定しています...このクラスをプロファイルと呼びましょう。

戦略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

それは大きな違いを生みます。

  • 利点1.ListViewの各アイテムに複雑なレイアウトを適用できます。
  • 利点2.目的の表示に一致するようにtoString()を操作する必要はありません(結局のところ、モデルとビューのロジックを分離しておくことは決して悪い設計手法ではありません)。

戦略2

または、代表クラスのtoString()メソッドがすでに表示に使用できる形式になっている場合は、getView()をオーバーライドせずにArrayAdapterを使用できます。

この戦略はより単純ですが、表示するためにすべてを1つの文字列に粉砕する必要があります。

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles)
于 2011-11-19T08:29:45.887 に答える