This is the container class that displays three fragments in a view pager and tab layout:
package com.connect.capp.activities;
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import com.connect.capp.R;
import com.connect.capp.adapters.ViewPagerAdapter;
import com.connect.capp.fragments.ChatListFragment;
import com.connect.capp.fragments.NearByFragment;
import com.connect.capp.fragments.SuggetionsFragment;
import com.google.android.gms.auth.api.identity.SignInClient;
import com.google.android.material.tabs.TabLayout;
public class Container extends AppCompatActivity {
public static SignInClient fAuth;
public static SignInClient gsc;
TabLayout tabLayoutContainer;
ViewPager viewPagerContainer;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container);
tabLayoutContainer = findViewById(R.id.tabLayoutContainer);
viewPagerContainer = findViewById(R.id.viewPagerContainer);
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), this);
viewPagerAdapter.addFragment(new ChatListFragment(), "Chats", R.drawable.ic_outline_chats, R.drawable.ic_filled_chats);
viewPagerAdapter.addFragment(new SuggetionsFragment(), "Suggestions", R.drawable.ic_outline_person_add, R.drawable.ic_filled_person_add);
viewPagerAdapter.addFragment(new NearByFragment(), "Near By", R.drawable.ic_outline_nearby, R.drawable.ic_filled_nearby);
viewPagerContainer.setAdapter(viewPagerAdapter);
tabLayoutContainer.setupWithViewPager(viewPagerContainer);
// Set custom view for each tab
for (int i = 0; i < tabLayoutContainer.getTabCount(); i++) {
TabLayout.Tab tab = tabLayoutContainer.getTabAt(i);
if (tab != null) {
tab.setCustomView(viewPagerAdapter.getTabView(i));
}
}
// Set click listener for tabs
tabLayoutContainer.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPagerContainer.setCurrentItem(tab.getPosition());
ImageView iconImageView = tab.getCustomView().findViewById(R.id.tabIcon);
iconImageView.setImageResource(viewPagerAdapter.getSelectedIconResId(tab.getPosition()));
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
ImageView iconImageView = tab.getCustomView().findViewById(R.id.tabIcon);
iconImageView.setImageResource(viewPagerAdapter.getIconResId(tab.getPosition()));
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
// No action needed
}
});
tabLayoutContainer.getTabAt(0).select();
}
}
And this is the adapter class for the view pager:
package com.connect.capp.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import com.connect.capp.R;
import java.util.ArrayList;
import java.util.List;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final ArrayList<Fragment> fragmentArrayList = new ArrayList<>();
private final List<Integer> fragmentIconResIds = new ArrayList<>();
private final List<Integer> fragmentSelectedIconResIds = new ArrayList<>();
private final Context context;
public ViewPagerAdapter(FragmentManager fragmentManager, Context context) {
super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.context = context;
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentArrayList.get(position);
}
@Override
public int getCount() {
return fragmentArrayList.size();
}
public void addFragment(Fragment fragment, String title, int iconResId, int selectedIconResId) {
fragmentArrayList.add(fragment);
fragmentIconResIds.add(iconResId);
fragmentSelectedIconResIds.add(selectedIconResId);
}
@Override
public CharSequence getPageTitle(int position) {
// Return null to disable the default title
return null;
}
public View getTabView(int position) {
View view = LayoutInflater.from(context).inflate(R.layout.custom_tab, null);
ImageView iconImageView = view.findViewById(R.id.tabIcon);
iconImageView.setImageResource(fragmentIconResIds.get(position));
return view;
}
public int getIconResId(int position) {
return fragmentIconResIds.get(position);
}
public int getSelectedIconResId(int position) {
return fragmentSelectedIconResIds.get(position);
}
}
The issue is that the tabs are changing with swipes and not by clicks. there is no response for the clicks.
there are two classes above that are responsible for the table layout. I have added addOnClickListener() too but it's only responding for the swipes and not for the clicks. the tabs are not switching with the clicks. can anyone please help me out with this?