Почему обработчик события не работает через include?

120
25 марта 2022, 02:40

Нужна in-app клавиатура,чтобы спокойно мог из разных активити подключать. Код следующий:

Клавиатура, задаем кнопки и т.д.:

public class MyKeyboard extends ConstraintLayout implements View.OnClickListener { 
 
 
    private Button button_q, 
            button_w, 
            button_e, 
            button_r, 
            button_t, 
            button_y, 
            button_u, 
            button_i, 
            button_o, 
            button_p, 
            button_a, 
            button_s, 
            button_d, 
            button_f, 
            button_g, 
            button_h, 
            button_j, 
            button_k, 
            button_l, 
            button_z, 
            button_x, 
            button_c, 
            button_v, 
            button_b, 
            button_n, 
            button_m, 
            buttonDelete, buttonEnter; 
 
    
    private SparseArray<String> keyValues = new SparseArray<>(); 
    private InputConnection inputConnection; 
 
    public MyKeyboard(Context context) { 
        super(context); 
        init(); 
    } 
 
 
    private void init() { 
 
        button_q = (Button) findViewById(R.id.button_q); 
        button_q.setOnClickListener(this); 
 
        button_w = (Button) findViewById(R.id.button_w); 
        button_w.setOnClickListener(this); 
 
        button_e = (Button) findViewById(R.id.button_e); 
        button_e.setOnClickListener(this); 
 
        button_r = (Button) findViewById(R.id.button_r); 
        button_r.setOnClickListener(this); 
 
        button_t = (Button) findViewById(R.id.button_t); 
        button_t.setOnClickListener(this); 
 
        button_y = (Button) findViewById(R.id.button_y); 
        button_y.setOnClickListener(this); 
 
        button_u = (Button) findViewById(R.id.button_u); 
        button_u.setOnClickListener(this); 
 
        button_i = (Button) findViewById(R.id.button_i); 
        button_i.setOnClickListener(this); 
 
        button_o = (Button) findViewById(R.id.button_o); 
        button_o.setOnClickListener(this); 
 
        button_p = (Button) findViewById(R.id.button_p); 
        button_p.setOnClickListener(this); 
 
        button_a = (Button) findViewById(R.id.button_a); 
        button_a.setOnClickListener(this); 
 
        button_s = (Button) findViewById(R.id.button_s); 
        button_s.setOnClickListener(this); 
 
        button_d = (Button) findViewById(R.id.button_d); 
        button_d.setOnClickListener(this); 
 
        button_f = (Button) findViewById(R.id.button_f); 
        button_f.setOnClickListener(this); 
 
        button_g = (Button) findViewById(R.id.button_g); 
        button_g.setOnClickListener(this); 
 
        button_h = (Button) findViewById(R.id.button_h); 
        button_h.setOnClickListener(this); 
 
        button_h = (Button) findViewById(R.id.button_h); 
        button_h.setOnClickListener(this); 
 
        button_j = (Button) findViewById(R.id.button_j); 
        button_j.setOnClickListener(this); 
 
        button_k = (Button) findViewById(R.id.button_k); 
        button_k.setOnClickListener(this); 
 
        button_l = (Button) findViewById(R.id.button_l); 
        button_l.setOnClickListener(this); 
 
        button_z = (Button) findViewById(R.id.button_z); 
        button_z.setOnClickListener(this); 
 
        button_x = (Button) findViewById(R.id.button_x); 
        button_x.setOnClickListener(this); 
 
        button_c = (Button) findViewById(R.id.button_c); 
        button_c.setOnClickListener(this); 
 
        button_v = (Button) findViewById(R.id.button_v); 
        button_v.setOnClickListener(this); 
 
        button_b = (Button) findViewById(R.id.button_b); 
        button_b.setOnClickListener(this); 
 
        button_n = (Button) findViewById(R.id.button_n); 
        button_n.setOnClickListener(this); 
 
        button_m = (Button) findViewById(R.id.button_m); 
        button_m.setOnClickListener(this); 
 
        buttonDelete = (Button) findViewById(R.id.button_delete); 
        buttonDelete.setOnClickListener(this); 
 
 
        buttonEnter = (Button) findViewById(R.id.button_space); 
        buttonEnter.setOnClickListener(this); 
 
        keyValues.put(R.id.button_q, "q"); 
        keyValues.put(R.id.button_w, "w"); 
        keyValues.put(R.id.button_e, "e"); 
        keyValues.put(R.id.button_r, "r"); 
        keyValues.put(R.id.button_t, "t"); 
        keyValues.put(R.id.button_y, "y"); 
        keyValues.put(R.id.button_u, "u"); 
        keyValues.put(R.id.button_i, "i"); 
        keyValues.put(R.id.button_o, "o"); 
        keyValues.put(R.id.button_p, "p"); 
        keyValues.put(R.id.button_a, "a"); 
        keyValues.put(R.id.button_s, "s"); 
        keyValues.put(R.id.button_d, "d"); 
        keyValues.put(R.id.button_f, "f"); 
        keyValues.put(R.id.button_g, "g"); 
        keyValues.put(R.id.button_h, "h"); 
        keyValues.put(R.id.button_j, "j"); 
        keyValues.put(R.id.button_k, "k"); 
        keyValues.put(R.id.button_l, "l"); 
        keyValues.put(R.id.button_z, "z"); 
        keyValues.put(R.id.button_x, "x"); 
        keyValues.put(R.id.button_c, "c"); 
        keyValues.put(R.id.button_v, "v"); 
        keyValues.put(R.id.button_b, "b"); 
        keyValues.put(R.id.button_n, "n"); 
        keyValues.put(R.id.button_m, "m"); 
        keyValues.put(R.id.button_space, " "); 
    } 
 
 
    @Override 
    public void onClick(View view) { 
 
        if (inputConnection == null) 
            return; 
 
        if (view.getId() == R.id.button_delete) { 
            CharSequence selectedText = inputConnection.getSelectedText(0); 
 
            if (TextUtils.isEmpty(selectedText)) { 
                inputConnection.deleteSurroundingText(1, 0); 
            } else { 
                inputConnection.commitText("", 1); 
            } 
        } else { 
 
            String value = keyValues.get(view.getId()); 
            inputConnection.commitText(value, 1); 
        } 
    } 
 
    public void setInputConnection(InputConnection ic) { 
        inputConnection = ic; 
    } 
}

Активити, где требуется клавиатура:

package com.tsvetkovopozdal.lalaeng; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.PersistableBundle; 
import android.speech.tts.Voice; 
import android.text.Editable; 
import android.text.InputFilter; 
import android.text.Spanned; 
import android.text.TextWatcher; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.TextView; 
 
import androidx.annotation.Nullable; 
import androidx.appcompat.app.AppCompatActivity; 
import androidx.cardview.widget.CardView; 
 
import android.text.InputType; 
import android.view.inputmethod.EditorInfo; 
import android.view.inputmethod.InputConnection; 
import android.widget.EditText; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.widget.Toast; 
 
import java.util.Locale; 
 
public class WordConstructor extends AppCompatActivity { 
 
 
    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.word_constructor); 
 
        Bundle argumets = getIntent().getExtras(); 
        final String name = argumets.get("text").toString(); 
        TextView a = findViewById(R.id.word_constructor_hello); 
        a.setText(name); 
 
        final EditText editText = (EditText) findViewById(R.id.editText); 
        editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 
        editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(name.length())});       this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
         
        MyKeyboard keyboard = new MyKeyboard(getApplicationContext()); 
         
        InputConnection ic = editText.onCreateInputConnection(new EditorInfo()); 
        keyboard.setInputConnection(ic); 
   
    } 
 
 
}

Подключается через include

<include 
    android:id="@+id/keyboard" 
    layout="@layout/keyboard"/>

Суть проблемы: при вызове init() из конструктора класса MyKeyboard студия выдает следующую ошибку

Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

Порывшись в сети, нашел посты, где у людей данная ошибка возникала при использовании findViewById до вызова методов onCreate() и setContentView(), это вроде бы не мой случай, так как создаю экземпляр класса после отрисовки view и в самом методе onCreate. Спустя половину дня поисков, зачем-то все таки заменил конструктор класса MyKeyboard на метод onCreate и вызвал init() из него, в итоге ошибка пропала, все запускается, но теперь в метод init() не заходит(дебажил toast'ом).

Вопрос: как в данном случае повесить слушаетели на кнопки клавиатуры, чтобы все работало через include? То есть чтобы не переносить логику клавиатуры, слушателей и т.д. в код активити.

Upd:

Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

Keyboard.xml

<?xml version="1.0" encoding="utf-8"?> 
<merge 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
 
 
    <androidx.constraintlayout.widget.Guideline 
        android:id="@+id/qwer" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        app:layout_constraintGuide_percent="0.9" /> 
     
    <androidx.constraintlayout.widget.Guideline 
        android:id="@+id/asd" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        app:layout_constraintGuide_percent="0.95" /> 
 
    <Button 
        android:id="@+id/button_q" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="q" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toLeftOf="parent" 
        app:layout_constraintRight_toLeftOf="@id/button_w" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_w" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="w" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_q" 
        app:layout_constraintRight_toLeftOf="@id/button_e" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_e" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="e" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_w" 
        app:layout_constraintRight_toLeftOf="@id/button_r" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_r" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="r" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_e" 
        app:layout_constraintRight_toLeftOf="@id/button_t" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_t" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="t" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_r" 
        app:layout_constraintRight_toLeftOf="@id/button_y" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_y" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="y" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_t" 
        app:layout_constraintRight_toLeftOf="@id/button_u" 
        app:layout_constraintTop_toTopOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_u" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="u" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_y" 
        app:layout_constraintRight_toLeftOf="@id/button_i" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_i" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="i" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_u" 
        app:layout_constraintRight_toLeftOf="@id/button_o" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_o" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="o" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_i" 
        app:layout_constraintRight_toLeftOf="@id/button_p" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_p" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="p" 
        app:layout_constraintBottom_toTopOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_o" 
        app:layout_constraintRight_toRightOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
 
 
    <Button 
        android:id="@+id/button_a" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="a" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toLeftOf="parent" 
        app:layout_constraintRight_toLeftOf="@id/button_s" 
 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_s" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="s" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_a" 
        app:layout_constraintRight_toLeftOf="@id/button_d" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_d" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="d" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintRight_toLeftOf="@id/button_f" 
        app:layout_constraintLeft_toRightOf="@id/button_s" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_f" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="f" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_d" 
        app:layout_constraintRight_toRightOf="@id/button_g" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_g" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="g" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_f" 
        app:layout_constraintRight_toLeftOf="@id/button_h" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_h" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="h" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_g" 
        app:layout_constraintRight_toLeftOf="@id/button_j" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_j" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="i" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_h" 
        app:layout_constraintRight_toLeftOf="@id/button_k" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_k" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="k" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_j" 
        app:layout_constraintRight_toLeftOf="@id/button_l" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_l" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="l" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_k" 
        app:layout_constraintRight_toLeftOf="@id/button_delete" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_delete" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="m" 
        app:layout_constraintTop_toBottomOf="@id/qwer" 
        app:layout_constraintLeft_toRightOf="@id/button_l" 
        app:layout_constraintRight_toRightOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
 
    <Button 
        android:id="@+id/button_z" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="z" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toLeftOf="parent" 
        app:layout_constraintRight_toLeftOf="@id/button_x" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_x" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="x" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toRightOf="@id/button_z" 
        app:layout_constraintRight_toLeftOf="@id/button_c" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_c" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="c" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toRightOf="@id/button_x" 
        app:layout_constraintRight_toLeftOf="@id/button_v" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_v" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="v" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toRightOf="@id/button_c" 
        app:layout_constraintRight_toLeftOf="@id/button_b" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_b" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="b" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toRightOf="@id/button_v" 
        app:layout_constraintRight_toLeftOf="@id/button_n" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_n" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="n" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toRightOf="@id/button_b" 
        app:layout_constraintRight_toLeftOf="@id/button_m" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_m" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="m" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintLeft_toRightOf="@id/button_n" 
        app:layout_constraintRight_toLeftOf="@id/button_space" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
    <Button 
        android:id="@+id/button_space" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        app:layout_constrainedHeight="true" 
        android:text="space" 
        app:layout_constraintTop_toBottomOf="@id/asd" 
        app:layout_constraintWidth_percent="0.3" 
        app:layout_constraintLeft_toRightOf="@id/button_m" 
        app:layout_constraintRight_toRightOf="parent" 
        app:layout_constraintBottom_toBottomOf="parent" 
        app:layout_constraintVertical_bias="1.0" /> 
 
</merge>

WordConstructor.xml

<?xml version="1.0" encoding="utf-8"?> 
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorBackground" 
    android:orientation="vertical" 
    android:id="@+id/wordcons" 
 
    tools:context="com.tsvetkovopozdal.lalaeng.WordConstructor"> 
    <TextView 
        android:id="@+id/word_constructor_hello" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:text="gravity" 
        android:textSize="14pt" 
        android:textStyle="bold" 
        app:layout_constraintBottom_toTopOf="@+id/guideline" 
        app:layout_constraintEnd_toEndOf="parent" 
        app:layout_constraintStart_toStartOf="parent" 
        app:layout_constrainedWidth="true" /> 
 
    <TextView 
        android:id="@+id/transcript" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center" 
        android:layout_margin="10dp" 
        android:drawableLeft="@drawable/ic_volume_up_black_24dp" 
        android:text=" [idfjdosfom]" 
        android:textSize="8pt" 
        app:layout_constraintBottom_toTopOf="@+id/guideline3" 
        app:layout_constraintLeft_toLeftOf="parent" 
        app:layout_constraintRight_toRightOf="parent" 
        app:layout_constraintTop_toBottomOf="@id/word_constructor_hello" 
        app:layout_constraintVertical_bias="0.0" /> 
 
    <EditText 
        android:id="@+id/editText" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_margin="50dp" 
        android:background="#ffffff" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false" 
        android:padding="5dp" 
        app:layout_constraintTop_toTopOf="@+id/guideline3" /> 
 
 
 
    <androidx.constraintlayout.widget.Guideline 
        android:id="@+id/guideline" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        app:layout_constraintGuide_percent="0.3" /> 
 
    <androidx.constraintlayout.widget.Guideline 
        android:id="@+id/guideline3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        app:layout_constraintGuide_percent="0.4" /> 
    <androidx.constraintlayout.widget.Guideline 
        android:id="@+id/guideline4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        app:layout_constraintGuide_percent="0.7" /> 
 
<include 
    layout="@layout/keyboard"/> 
 
</androidx.constraintlayout.widget.ConstraintLayout>

После добавления инфлейтера вьюшки находятся, но onClick не срабатывает, будто слушаетель вешается на другие экземпляры кнопок.

Answer 1

Ты пытаешься обратиться к вьюшкам, которые лежат в .xml, но твоя вьюшка с клавиатурой не знает ничего о том самом .xml, поэтому тебе нужно ее заинфлейтить.

Для этого в начало init() добавь следующее:

LayoutInflater.from(getContext()).inflate(R.layout.твой_айди_разметки, this, true)

Кроме того, лейаут разметки желательно обернуть не в ConstraintLayout, а в merge, это избавит тебя от лишней прослойки из вьюх на этапе инфлейтинга.

И ещё -- использовать Constraint на вьюшке с клавиатурой, наверное, не лучшая идея, ибо получается слишком много связей, и measure/layout pass может занять довольно много времени.

READ ALSO
Получить данные со страницы для последующего использования

Получить данные со страницы для последующего использования

друзьяДля работы моей программы требуется:

291
MySQL из сайта на Android - возможно ли это?

MySQL из сайта на Android - возможно ли это?

Могу ли я в своём Android-приложении брать данные из БД MySQl, расположенной на сервере?

192
Adapter не распознает setter

Adapter не распознает setter

У менять есть класс Н, созданный для адаптераВ классе М(адаптер) я вызываю сеттер из класса Н, но его не распознает, подчеркивает краснsv

92
Нужно написать собственную реализацию ArrayList , проблема с sublist

Нужно написать собственную реализацию ArrayList , проблема с sublist

Столкнулся вот с такой проблемой: Есть задание: - нужно написать собственную реализацию ArrayListОсновная проблема заключается в том что не могу...

70