Как получить событие нажатия вкладки в действии на Android TabLayout

Это реализация метода onCreate в моей деятельности. Мне нужно создавать вкладки динамически. Для простоты я сделал 2 вкладки.

public class ActivityProductList extends AppCompatActivity {

    private android.support.v7.widget.SearchView searchView = null;
    private RecyclerView recyclerView;
    MyAdapter adapter;
    List<ParentListItem> parentListItems = new ArrayList<>();
    List<ParentListItem> originalProductList = new ArrayList<>();
    String query = null;
    int categoryId = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_products_final);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("PRODUCTS");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        //ViewPager viewPager = (ViewPager) findViewById(R.id.pager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
        //setupViewPager(viewPager);
        //tabLayout.setupWithViewPager(viewPager);
        //viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

        searchView = (android.support.v7.widget.SearchView) findViewById(R.id.searchView);
        searchView.setIconified(false);
        searchView.onActionViewExpanded();
        searchView.clearFocus();
        searchView.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                if (adapter != null)
                    filterData(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                if (adapter != null)
                    filterData(query);
                return false;
            }
        });

    }
}

Я хочу изменить значение EditText при нажатии на вкладку. Это EditText в той же деятельности.

Как получить событие нажатия Tab в Activity?

Ответ 1

Вы можете использовать слушателя onTabSelected для достижения этого.

tabLayout.addOnTabSelectedListener(new OnTabSelectedListener() {
        @Override
        public void onTabSelected(Tab tab) {
             switch(tab.getPosition()) {
                 case 0:
                  ....
             }
        }

P.S. setOnTabSelectedListener устарела, используйте вместо этого addOnTabSelectedListener.

Ответ 2

  Вы можете использовать прослушиватель onTabSelected в Kotlin следующим образом:

tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab?) {
            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {
            }

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

Ответ 3

Если вам нужно щелкнуть вкладку, а не каждый раз, когда вкладка выбрана, вы можете использовать настраиваемый вид для каждой вкладки, а затем обрабатывать щелчок на соответствующем представлении, например, так:

for (int i = 0; i < tabLayout.getTabCount(); i++) {
    final TabLayout.Tab tab = tabLayout.getTabAt(i);
    final View tabView = LayoutInflater.from(this).inflate(
            R.layout.item_tab, (ViewGroup) tab.getCustomView(), false);
    tabLayout.setCustomView(tabView);

    final TextView customView = (TextView) tab.getCustomView();
    customView.setText(mAdapter.getPageTitle(i));
    final int index = i;
    customView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (tabLayout.getSelectedTabPosition() == index) {
                // change edittext value
            } else {
                tab.select();
            }
        }
    });
}

Ответ 4

Вот порт Xamarin.Android/C# ответа Шашанка Удупа, который работает для меня:

Сначала вы должны реализовать интерфейс IOnTabSelectedListener, как показано ниже:

public class MyOnTabSelectedListener : Java.Lang.Object, TabLayout.IOnTabSelectedListener
{
    Activity _activity;

    public MyOnTabSelectedListener(Activity activity)
    {
        _activity = activity;
    }

    public void OnTabReselected(TabLayout.Tab tab)
    {
    }

    public void OnTabSelected(TabLayout.Tab tab)
    {
        switch (tab.Position)
        {
            case 0:
                // your logic goes here!
                break;

            // ...
        }
    }

    public void OnTabUnselected(TabLayout.Tab tab)
    {
    }
}

Затем используйте приведенный выше класс следующим образом:

tabLayout.AddOnTabSelectedListener(new MyOnTabSelectedListener(this));