Android TabItem onClick не работает

У меня есть функция cityClick, если я вызываю эту функцию из textView, она работает нормально, но если я вызываю cityClick из TabItem, она не работает, что происходит?

Ява

public class Kategorie extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

protected void cityClick(View view) {
    Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}

Макет

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:clickable="true"
        android:onClick="cityClick"
        app:tabMode="fixed">

        <android.support.design.widget.TabItem
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:textAlignment="center"
            android:textSize="18sp"
            android:onClick="cityClick"
            android:clickable="true"
            android:text="GDAŃSK" />

        <android.support.design.widget.TabItem
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:textAlignment="center"
            android:textSize="18sp"
            android:onClick="cityClick"
            android:clickable="true"
            android:text="SOPOT" />

        <android.support.design.widget.TabItem
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:textAlignment="center"
            android:textSize="18sp"
            android:onClick="cityClick"
            android:clickable="true"
            android:text="GDYNIA" />

    </android.support.design.widget.TabLayout>

Я искал на этом форуме, но ничего не нашел, чтобы помочь мне.


person Sławek Lis    schedule 04.07.2017    source источник
comment
Проверьте, работает ли это. stackoverflow.com/questions/4337514 /   -  person Ramakanth Putta    schedule 04.07.2017
comment
Решения оттуда немного сложные, есть ли простой способ вызвать одну маленькую функцию без нескольких десятков дополнительных строк кода?   -  person Sławek Lis    schedule 04.07.2017
comment
Я думаю, что минусующие должны дать решение ... для меня это правильный вопрос, который соответствует руководящим принципам SO ... нет причин для минуса.   -  person Opiatefuchs    schedule 04.07.2017
comment
@slawek: вы использовали точно такой же cityClick в своем текстовом представлении?   -  person Opiatefuchs    schedule 04.07.2017
comment
да, это та же функция и ее работа для textView   -  person Sławek Lis    schedule 04.07.2017
comment
Я не уверен, но попробуйте две вещи по отдельности: 1. удалите onClick и clickable из android.support.design.widget.TabLayout . Может быть, он получает Focus, и никакой другой вид не может быть затронут внутри. и 2. Измените protected void cityClick на public void cityClick, как в документах onClick XML-атрибута, предлагается модификатор public. Просто попробуйте......   -  person Opiatefuchs    schedule 04.07.2017


Ответы (3)


Попробуй это,

  tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                Toast.makeText(mActivity, "hai", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
person Rashmi Bhandari    schedule 04.07.2017

В Котлине,

tabs.addOnTabSelectedListener(object:TabLayout.OnTabSelectedListener {
    override fun onTabSelected(tab : TabLayout.Tab) {
        Toast.makeText(mActivity, tab.text, Toast.LENGTH_SHORT).show()
    }
    override fun onTabUnselected(p0: TabLayout.Tab?) {

    }
    override fun onTabReselected(p0: TabLayout.Tab?) {

    }
})
person Luke Redmore    schedule 27.06.2019

Поскольку может существовать несколько вкладок, это будет более полным:

TabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                switch (tab.getPosition()) {
                    case 0:
//                        codes related to the first tab
                        break;
                    case 1:
//                        codes related to the second tab
                        break;
                    case 2:
//                        codes related to the third tab
                        break;
                    case 3:
//                        codes related to the fourth tab
                        break;
                        .
                        .
                        .
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
person elyar abad    schedule 14.10.2019