использование getLayoutInflater (). inflate () для получения дочернего элемента из файла макета в InputMethodService - PullRequest
2 голосов
/ 03 марта 2020

Я пытаюсь получить CustomView клавиатуры из макета файла. Вот код

public class MyInputMethodService extends InputMethodService
        implements KeyboardView.OnKeyboardActionListener {

...
    @Override 
    public View onCreateInputView() {

        SindhikKeyboardView mInputView = (SindhikKeyboardView) getLayoutInflater().inflate(
                                      R.layout.keyboard, null).findViewById(R.id.keyboard);
        mInputView.setOnKeyboardActionListener(this);
        setLatinKeyboard(mQwertyKeyboard);
        return mInputView;
    }
...
}

Но он дает мне ошибку

java .lang.IllegalStateException: У указанного дочернего элемента уже есть родитель. Сначала вы должны вызвать removeView () для родительского объекта ребенка.

Код в файле макета:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<io.github.fahadmaqsood.sindhik.SindhikKeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:id="@+id/keyboard" />

</RelativeLayout>

Я знаю, что .findViewById() вызывает проблему. Если я удаляю это и элемент RelativeLayout из файла макета, это работает! но я хочу, чтобы RelativeLayout был там ... как я могу избавиться от этой ошибки? На этом сайте есть ответы, похожие на ошибку, которую я получил. но я не могу найти решение моей проблемы через них.

Редактировать: Полный журнал ошибок

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: io.github.fahadmaqsood .sindhik, PID: 3126 java .lang.IllegalStateException: Указанный дочерний элемент уже имеет родителя. Сначала необходимо вызвать removeView () для родительского элемента дочернего элемента. в android .view.ViewGroup.addViewInner (ViewGroup. java: 3562) в android .view.ViewGroup.addView (ViewGroup. java : 3415) в android .view.ViewGroup.addView (ViewGroup. java: 3391) в android .inputmethodservice.InputMethodService.setInputView (InputMethodService. java: 1260) в android .inputmethodserd.Serm. updateInputViewShown (InputMethodService. java: 1117) в android .inputmethodservice.InputMethodService.showWindowInner (InputMethodService. java: 1471) в android .inputmethodservice.InputMethodWerService.InputMethodService для Windows (10). 1039 * .inputmethodservice.InputMethodService. $ MyHandler.handleMessage (HandlerCaller. java: 40) в android .os.Handler.dispatchMessage (Handler. java: 102) в android .os.Looper.l oop (Loope r. java: 136) на android .app.ActivityThread.main (ActivityThread. java: 5001) на java .lang.reflect.Method.invokeNative (собственный метод) на java .lang. refle.Method.invoke (Method. java: 515) в com. android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 793) в com. android .internal.os. ZygoteInit.main (ZygoteInit. java: 609) в dalvik.system.NativeStart.main (собственный метод)

...