0

A オブジェクトのリストを表示する必要があります ( と考えてList<A>ください)。A の構造は次のとおりです。

class A {
    List<B> bList;
    List<C> cList;
}

3 つのリストはすべて任意の長さにすることができます。As のリストの各行に全長で表示する必要がありますbListcList各リストは、SQLite カーソルによって支えられています。一種のカレンダービューです。次の図は、この考え方を示しています。

ここに画像の説明を入力

今、これを「Androidの方法で」達成するための最良の方法は何だろうと思っています。私は複数のことを試しました:

  1. B と C のネストされた ListView を持つ A の ListView: 推奨されません。B と C のスクロール動作を無効にするのは難しいです。
  2. B と C の LinearLayout を使用した A の ListView と、アダプターの LinearLayouts に子ビューをプログラムで追加する: B と C のカーソルの更新を管理し、行の高さを自分で調整する必要があります。アダプターの多くのビュー管理コードは、属していません。
  3. ネストされた LinearLayouts のすべてを構成する: 2 と同じ問題、対処するさらに多くのカーソル。

既存の機能を十分に活用できる別の方法があるのではないでしょうか?

私はすでに StackOverflow で同様の質問を見てきました。上位2つの提案は次のようです。

  • 複数のアクティビティ/フラグメントにデータを分散する: 考慮されますが、ユーザーフレンドリーではないためオプションではありません (この場合)。
  • ExpandableListView を使用: データ構造には適用できないようです。B と C のリストは最初から表示されるはずです。
4

1 に答える 1

1

このタイプのビューを実装するには、2 つのことを実装する必要があります。

ListView listView;
IArrayAdapter iArrayAdapter;

xml で提供された ID で listView を初期化します。

Activity.this.runOnUiThread(new Runnable() {
        public void run() {
            iArrayAdapter = new IArrayAdapter(Activity.this,
                    R.layout.list_item, "list of items group it from Bean");
            listView.setAdapter(iArrayAdapter);
            iArrayAdapter.notifyDataSetChanged();
        }
    });

list_item は、リストに表示する必要があるディスプレイの種類を含む別のレイアウトです。

IArrayAdapter は ArrayAdapter を拡張するクラスです

public class IArrayAdapter extends ArrayAdapter<IBean> {

private final Activity context;
private final ArrayList<IBean> iBeans;
private int resourceId;

public InboxArrayAdapter(Activity context, int resourceId,
        ArrayList<IBean> iBeans) {
    super(context, resourceId, inboxBeans);
    this.context = context;
    this.iBeans = iBeans;
    this.resourceId = resourceId;
}

/*
 * TO update View
 * 
 * @see android.widget.ArrayAdapter#getView(int, android.view.View,
 * android.view.ViewGroup)
 */
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;
    if (rowView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = layoutInflater.inflate(resourceId, null);

    final IBean iBean = iBeans.get(position);
    final ImageView imageView = (ImageView) rowView
            .findViewById(R.id.message);
    final TextView rowTxt = (TextView) rowView
            .findViewById(R.id.senderName);
    final TextView rowTxt1 = (TextView) rowView
            .findViewById(R.id.senderMessage);
    final TextView rowTxt2 = (TextView) rowView
            .findViewById(R.id.senderTime);
    final CheckBox check = (CheckBox) rowView.findViewById(R.id.check);
    .....set text here.....
return rowView;
}

}

imageView、rowtext などはレイアウト list_item の一部です

AAnd IBean は、リストに 5 つの iTem を含む Java Bean クラスです。不要な項目は空白のままにします。

于 2012-10-08T12:36:30.967 に答える