Можно ли установить Focus или установить OnClick для Android TableLayout?

avatar
svstackoverflow
8 августа 2021 в 20:00
37
2
1

Проблема: Я пытался установить setOnClickListener или setOnFocusChangeListener в TableLayout, но я не получаю никакого ответа, и нет никаких ошибок отладки или проблем, которые я могу определить.

Что я пытаюсь сделать: Когда кто-то нажимает tablelayout, чтобы добавить авторов, EditText для одного автора заполняется стандартным сообщением (возможно, отключите его), если макет таблицы имеет более одного ребенка, использующего getChildCount().

Что я пробовал: Как я уже упоминал, я пытался установить события setOnClickListener и setOnFocusChangeListener, но ничего не происходит. Я попытался установить сообщения Toast, чтобы узнать, активируется ли он, но ничего не получаю. Я не уверен, что я могу делать неправильно. Я установил OnClick и Focus для многих объектов, но это первый макет таблицы, и у меня возникли проблемы.

tableLayoutAuthors.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus){
            Toast.makeText(AddNote.this,tableLayoutAuthors.getChildCount(), Toast.LENGTH_LONG);
            if(tableLayoutAuthors.getChildCount()>1)
                author.setText(R.string.add_author_phrase);
            else if(tableLayoutAuthors.getChildCount()==1)
                populateSourceDetails(DBQueryTools.getSourcesByTitle(sourceTitle.getText().toString()));
        }
    }
});
Источник
Code Demon
8 августа 2021 в 21:51
0

не могли бы вы поделиться макетом xml ..

Ответы (2)

avatar
svstackoverflow
8 августа 2021 в 22:48
1

Я нашел решение...

Как только я выберу addOnLayoutChangeListener, таблица отреагирует так, как я и надеялся. Это может быть не мой окончательный ответ на дизайн, но он работал со следующим:

View tblLayAut = tableLayoutAuthors;
tblLayAut.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        if(tableLayoutAuthors.getChildCount()>1)
            author.setText(R.string.add_author_phrase);
        else if(tableLayoutAuthors.getChildCount()==1)
            populateSourceDetails(DBQueryTools.getSourcesByTitle(sourceTitle.getText().toString()));
    }
});

avatar
Code Demon
8 августа 2021 в 21:56
0

Просто добавьте эти свойства XML в свой TableLayout поскольку по умолчанию для них установлено значение false

android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"