0

私はこの問題を 1 週間以上抱えていますが、ここと Google で何十ものトピックを調べた後も、まだ答えがありません。問題は、データを長いListViewに動的にロードしているため、初期化が何年も持続しないことです。電話の向きを変更した後、ListView のサイズが変更され、内部に空の要素が含まれています (問題ありません)。だから私は OnConfigurationChanged イベントがこれを処理すると思った。残念ながら、ウィジェットのサイズが変更される前に起動されるため、まだ空のリストがあります。そして、ここに私の質問があります: とにかく、ウィジェットのサイズが変更されて描画された後に発生するイベント (またはリスナー) を取得することですか?

私はすでにマニフェストに持っています:

android:configChanges="keyboardHidden|orientation|screenSize

また、ロードに数秒かかるため、「オフ」にする方法はありません。電話の向きを変更するときに数秒の遅延が発生したくないためです。

PS言語の間違いについては申し訳ありません;)

4

1 に答える 1

0

はい。リッスンする setOnGlobalLayoutListener() を使用でき、レイアウトが完了したらコールバックを使用できます

また、画面の回転では、アクティビティを破棄して再作成する必要があるため、読み込みを再開する必要があります。何か変なことしてる?

私はフラグメントの1つでこれを行います:

root = inflater.inflate(R.layout.fragment_booking_accepted, null);
    root.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Dbg.e(TAG, "- On Layout Completed ! ");
                    // If you need this to be called again, then run again addOnGlobalLayoutListener.
                    // root.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    isLayoutCompleted = true;
                    // YOU write here all the coed you might need. }}}} close brackets

編集 :

  1. ほとんどの人は、Android にその仕事をさせないのは恐ろしいことだと考えています。つまり、画面が回転したときに破棄して再作成します。しかし、やりたいことはできます。
  2. 空のリスト ビューの読み込みは非常に簡単です。レイアウトをロードするのに数秒かかるなんてありえない。レイアウトとリストビューをスピナーでロードして、携帯電話が何をしているか (ロード中) をユーザーに知らせる必要があります。データがロードされたら、データの変更をアダプターに通知します。

それはあなたの視点を変えますか?私に聞いてください、私が知っているなら、私は答えようとします。

于 2013-11-08T13:03:06.047 に答える