2

ViewPager にカスタム ビューとスピナーをトップ バーに組み込んだフラグメントがあります。ビューページャーでページを変更するたびに、db からスピナーの文字列を更新する必要があります。これを行うには、viewPager リスナーの onPageSelected で、データベースからデータを取得するスレッドを起動し、スピナーのアダプターを runOnUiThread 経由で更新します。問題は、スピナーのアダプターに対して呼び出された notifyDataSetChanged() がビューページャーに遅れることです。いくつかのビューを再構築する必要がありますが、少し遅れます。

            @Override
        public void onPageSelected(final int pos) {
            new Thread(new Runnable() {
                @Override
                public void run() {

...

                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mSpinnerAdapter.notifyDataSetChanged();
                        }
                    });
                }
            }).start();
        }

これを解決するには?優先度が最も低いメインスレッドでコードを実行することは可能ですか?

4

2 に答える 2

0

まず、スレッドを削除してから、runOnUiThread を削除してみてください。

于 2012-10-12T14:42:03.007 に答える
0

あなたは逃げることができるはずです:

       @Override
    public void onPageSelected(final int pos) {
        ... // your hidden code
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mSpinnerAdapter.notifyDataSetChanged();
            }
        });
    }

新しいスレッドは必要ありません。

于 2012-10-12T14:44:41.977 に答える