tabs are not switching by clicks, how to fix this?

24 Views Asked by At

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?

0

There are 0 best solutions below