リッチ テキスト エディタを作成しているので、子コンポーネントを持つ ViewGroup を受け取る拡張 EditText があります。この ViewGroup は、太字などのトグル ボタンを備えたツールバーです。
EditText は次の方法でツールバーを受け取ります。
private ViewGroup toolbar;
public CustomEditText(Context context, LinearLayout newToolbar) {
super(context);
toolbar = newToolbar;
}
このコードでは、CustomEditText がツールバーの可視性を正常に制御します。
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused)
toolbar.setVisibility(View.VISIBLE);
else
toolbar.setVisibility(View.GONE);
}
しかし、残念ながら、たとえば、これはNullPointerExceptionを返します。
@Override
protected void onTextChanged(CharSequence text, int start,
int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
toolbar.setVisibility(View.GONE);
}
現在のアクティビティで CustomEditText に TextWatcher を追加することで解決できることはわかっていますが、CustomEditText に関連するすべてを処理させようとしています。
すべてがonFocusChangedで機能したのに、 onTextChangedでは機能しなかった理由を知っていますか?