1

私はリストビューを持っていますが、それはしばらくの間期待どおりに機能しています。最近、ユーザーがデバイスソフトウェアをJellyBeanに更新しましたが、リストビューの選択が押されても更新されません。

バックグラウンドで、onTouchEvent()メソッドが起動し(そして、アダプターのonItemClick())、選択が「内部」に設定され、単に選択されたものとして表示されません。ただし、デバイスを回転させて向きを変更すると、再描画時に選択のハイライトが表示されます。

私は他の問題を検索しましたが、最も近いのはonAttachedToWindow()メソッドがオーバーライドされ、スーパー実装を呼び出さなかったことですが、ここではそうではありません。

他の誰かがJellyBeanで同様の問題を見て、解決策を知っていますか?

4

2 に答える 2

0

この問題に対するより良い解決策は、 listview の invalidateViews() 関数を使用することです。

ListView.invalidateViews()は、ListView にすべての子項目ビューを無効にする (再描画する) ように指示するために使用されます。Adapter.notifyDataSetChanged ()は、アダプターのオブザーバーに、適応されている内容が変更されたことを通知します。

この特定のケースでは、データセットが更新されず、ビューを再描画するだけでよいため、 ListView.invalidateViews() の方が適切なオプションのようです。

OnItemClick に listview.invalidateViews() を挿入すると、準備完了です。

public void onItemClick(AdapterView<?> av, View v, int position,long id) {
            // TODO Auto-generated method stub
                    listview.invalidateViews();
            /*  YOUR   CODE 
                                GOES   HERE    */          
        }
    });

GridView にも同じ機能を使用できます。

于 2013-04-27T09:28:16.957 に答える
0

Added a call to adapter.notifyDataSetChanged(), on each selection.

Not ideal as I suspect there will be a performance hit for large dataset's.

于 2013-02-05T00:39:20.400 に答える