2012-03-21 19 views
1

CustomListAdapterを使用してListViewを動的に埋め込むことは、あまりにも文書化されていません!これについての情報を見つけることは非常に困難でしたが、ついにそれを働かせました。AndroidListViewStats.Goneが原因で、カスタムリストアダプターが予期せぬ結果を招く

抽象的には、私のリストビューCustomListAdapterでは、ボックスの束とそれぞれの内容を示すリストを作成します。 CustomListAdapterが正常に動作し(即ちブランク&可視)限り私は単独で使用されていないTextViewsを残すように1箱(textViewsののLinearLayoutを介して)許可4件の商品

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

Box 1 
------- 
laptops 

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

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

まであります。しかし、これらの空白行がすべて表示されていると、リストは非常に長くなります。 <の4つのアイテム(ボックス1など)のLinearLayoutsでは、未使用のTextViewの可視性を「Gone」に設定して空の垂直スペースを縮小しようとすると、データが予期せぬ方法で混乱します。ボックス2ではなくボックス1に表示され、ボックス0のコンテンツは消滅します。

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

+0

リサイクルの問題のようです。あなたのアダプターコードを投稿してください。 – dmon

+0

"はボックス2の代わりにボックス1に表示され、ボックス0のコンテンツは消滅します。 'getView'の内部でTextViewsを隠すコードはどこですか? – zapl

+0

ListViewアイテムを隠すのではなく、元のアイテムからアイテムを削除するはずはありませんか? – Matthew

答えて

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つの異なる順列しかないので、この状況で私のために働く。しかし、より多くの順列がある場合には、問題が何であるかを理解することが良いでしょう。