ViewGroup を拡張するカスタム レイアウトを実装しました。その onLayout() メソッドで、すべての子に対してループを作成します。子をレイアウトに追加し、測定してからレイアウトします。それはうまく動作します。
しかし今は、子供たちに動的コンテンツを持たせたいと思っています。そのため、各子のビューホルダーにハンドラーとランナブルを追加しました (私のレイアウトにはアダプターが取り込まれています)。このランナブルは、10 秒ごとにテキストビューを更新することを目的としています。何が起こるかというと、TextView が切り捨てられます。実際には、設定されている最初の文字列の幅を取り、再測定または再レイアウトすることは決してないことがわかりました。カスタム レイアウトを FrameLayout を拡張することにしました。そして、私の onLayout() メソッドで super.onLayout() を呼び出すと、すべてが正常に機能します。子の TextView が Runnable によって更新されるたびに、カスタム レイアウトの onLayout メソッドでコールバックされます。
大きな疑問はなぜですか?FrameLayout を拡張するだけでは不十分です。super.onLayout() を呼び出す必要があります。このメソッドのコードを確認しましたが、機能させるために何をするのかわかりません。ドキュメントによると、レイアウトはトップダウンで 1 つのパスであるため、このメソッドを呼び出すと、子が更新されるたびにカスタム レイアウトが再レイアウトされるのはなぜですか? 私は自分の子供に requestLayout() と invalidate() を呼び出そうとしましたが、役に立たなかったことに注意してください。
私を読んでくれてありがとう。十分に明確でない場合は、コードを提供できます。