Как получить событие нажатия вкладки в действии на 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));