2012-03-17 45 views
0

リストビューアイテムにボタンを追加しました。ボタンをクリックした後、ボタンが無効になります。下のsetOnClickListenerをカスタムアダプタのボタンに使用しましたが、問題はボタンをクリックしたときに別のリスト項目のボタンも無効になることです。たとえば、アイテム1のボタンをクリックすると、アイテム1のボタンは無効になりますが、アイテム4のボタンも同時に無効になりますが、クリックしませんでした。 また、上下にスクロールすると、すべてのアイテムのボタンがランダムに有効と無効になります。 これはなぜ起こっているのですか?Android:リストビューでボタンを無効にする

答えて

2

私はこの問題に直面したときにとても不満でした!

ここでの問題は、リストビューはボタンの状態を覚えていないことです。それはバグだけど、とにかく私は道が必要でした、そして、これは私がしたことです。

あなたはビューアホルダー付きのカスタムアダプターを使用していると思います。あなたが正しい道にいることを意味します。あなたはあなたのリスト内の項目の数と同じ大きさのブール値の配列を保つ必要があります。 btnClick()で配列内の項目の状態を設定します。

今すぐスクロールするか、リストを再描画するようにするたびにgetView()が呼び出されます。アイテムの状態についてはgetView()にチェックを入れ、有効/無効にします。もう1つ、チェックのためにif{}else{}の両方を実装してください。

if(checked){ 
    holder.viewBtn.setEnabled(false); 
}else{ 
    holder.viewBtn.setEnabled(true); 
} 

これを行わないと、奇妙な動作が表示されます。もう1つのことは、

if(convertview == null){ 
    //create the holder 
}else{ 
    convertview = getTag(); 
} 

の方法の場合は、上記の手順の後に状態を入力することを確認します。

私はあなたの実装を見たことがありませんが、アイテムのボタンをポップアップして、それを使用してリストからアイテムを削除しなければなりませんでした。だから私は国家を維持するために特別な注意を払わなければならなかった。

基礎となるデータが変更されたら状態に注意してください。

長い記事については申し訳ありませんが、問題は:(

ようになっている私は、基本的なformat

でソリューションを持っているリンクを見つけました
1
holder.viewBtn.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         holder.viewBtn.setEnabled(false); 
         showInfo();     
        }   }); 

ListViewが誤った方法でView Sを再利用するので、これが起こっています。 Viewを再利用せずに独自のListAdapterを実装するか、Googleにバグレポートを提出してください

関連する問題