1

CustomListAdapterを使用してListViewを動的に入力することは、完全に文書化されているわけではありません。これに関する情報を見つけるのは非常に困難でしたが、私はついにそれを機能させることができました。

要約すると、リストビューCustomListAdapterで、一連のボックスとそれぞれの内容を示すリストにデータを入力します。ボックスごとに(textViewsのLinearLayoutを介して)最大4つのアイテムが許可されます

Box 0
--------
shirts
shoes
ties
boxers

Box 1
-------
laptops

Box 2
-----
tennis racket
basketball
diving mask

Box 3
----------
tiles
grout

未使用のTextViewをそのままにしておく(つまり、空白で表示されている)限り、CustomListAdapterは正常に機能します。ただし、リストは非常に長くなり、これらの空白行がすべて表示されます。アイテムが4つ未満のLinearLayouts(ボックス1など)で、未使用のTextViewの可視性を「Gone」に設定して空の垂直スペースを縮小しようとすると、データが予期しない方法で乱雑になります。つまり、「ダイビングマスク」はボックス2ではなくボックス1に表示され、ボックス0の内容は消えます。

CustomListAdapterでx.Visibility=ViewStates.Goneを使用しているときに、他の誰かがこの予測不可能性を経験したことがありますか?Android.Views.ViewStates.Goneを設定して、未使用のTextViewが占める垂直方向のスペースを取り除くよりも良い方法はありますか?

4

1 に答える 1

1

dmon、zapl、および Matthew: 返信ありがとうございます。GetView オーバーライド関数内のコードの一部を次に示します。

var  tv_class_title  =view.FindViewById(Resource.Id.tv_class_title) as TextView;
var  tv_codex    =view.FindViewById(Resource.Id.tv_codex) as TextView;

                //class title
if (item.class_title.Length>0){
  tv_class_title.SetText(item.class_title, TextView.BufferType.Spannable);
}else{
  tv_class_title.Visibility     =       Android.Views.ViewStates.Gone;
}
                //codex
if (item.codex.Length>0){
  tv_codex.SetText(item.codex, TextView.BufferType.Spannable);
}else{
  tv_codex.Visibility       =       Android.Views.ViewStates.Gone;
}                   

return view;

この問題の回避策を見つけました。リストの長さごとに異なるビュー (つまり、4 つのアイテムを含むボックスのビュー、3 つのアイテムを含むボックスの別のビュー、2 つのアイテムを含むボックスの別のビューなど) を作成し、リスト(コンテンツのサイズに応じて)、動的リストは完全に表示およびスクロールされます。この状況では、順列が 5 つしかないため、これでうまくいきます。ただし、より多くの順列がある場合に備えて、問題が何であるかを把握するとよいでしょう。

于 2012-03-27T06:36:58.970 に答える