mohammmeden
mohammmeden

Reputation: 43

Change current tab from fragment in android

It has 5 tabs. Each tab is a Fragment. What I am looking for is to switch between the tabs programmatically. Tried with the following, but it doesn't help me.

=========================My Main Activity java=========================

public class MainActivity extends AppCompatActivity {

private SectionsPageAdapter mSectionsPageAdapter;
private FirebaseAuth auth;
public ViewPager mViewPager;
public TabLayout tabLayout;
private final String TAG = "ListActivity";



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    auth = FirebaseAuth.getInstance();
    setContentView(R.layout.activity_main);


    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    setupViewPager(mViewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);


    tabLayout.getTabAt(0).setText("program");
    tabLayout.getTabAt(1).setText("security");
    tabLayout.getTabAt(2).setText("devices");
    tabLayout.getTabAt(3).setText("network");
    tabLayout.getTabAt(4).setText("sections");

    BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavView_Bar);
    BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
    Menu menu = bottomNavigationView.getMenu();
    MenuItem menuItem = menu.getItem(3);
    menuItem.setChecked(true);
    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.ic_home:

                    break;

                case R.id.ic_message:
                    Intent intent1 = new Intent(MainActivity.this, ActivityOne.class);
                    startActivity(intent1);
                    break;

                case R.id.ic_add:
                    if (auth.getCurrentUser() != null) {
                        createNewListItem();
                    }else{
                        Toast.makeText(getApplicationContext(), "You have to Login to Add a new Service!", Toast.LENGTH_SHORT).show();
                    }

                    break;

                case R.id.ic_profile:
                    Intent intent3 = new Intent(MainActivity.this, ActivityThree.class);
                    startActivity(intent3);
                    break;

            }


            return false;
        }
    });



}

private void setupViewPager(ViewPager viewPager) {
    SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
    adapter.addFragment(new Tab1Fragment());
    adapter.addFragment(new Tab2Fragment());
    adapter.addFragment(new Tab3Fragment());
    adapter.addFragment(new Tab4Fragment());
    adapter.addFragment(new Tab5Fragment());
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(4);
}

==================================My Fragment==========================

public class RecyclerViewDataAdapter extends RecyclerView.Adapter<RecyclerViewDataAdapter.ItemRowHolder> {

private ArrayList<SectionDataModel> dataList;
private Context mContext;

public RecyclerViewDataAdapter(Context context, ArrayList<SectionDataModel> dataList) {
    this.dataList = dataList;
    this.mContext = context;
}

@Override
public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null);
    ItemRowHolder mh = new ItemRowHolder(v);
    return mh;
}

@Override
public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) {

    final String sectionName = dataList.get(i).getHeaderTitle();

    ArrayList singleSectionItems = dataList.get(i).getAllItemsInSection();

    itemRowHolder.itemTitle.setText(sectionName);

    SectionListDataAdapter itemListDataAdapter = new SectionListDataAdapter(mContext, singleSectionItems);

    itemRowHolder.recycler_view_list.setHasFixedSize(true);
    itemRowHolder.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
    itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapter);


     itemRowHolder.recycler_view_list.setNestedScrollingEnabled(false);


   /*  itemRowHolder.recycler_view_list.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    // Disallow ScrollView to intercept touch events.
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    break;
                case MotionEvent.ACTION_UP:
                    //Allow ScrollView to intercept touch events once again.
                    v.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
            }
            // Handle RecyclerView touch events.
            v.onTouchEvent(event);
            return true;
        }
    });*/

    itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TabLayout tabLayout = (TabLayout)v.findViewById(R.id.tabs);

            Toast.makeText(v.getContext(), "click event on more, "+sectionName , Toast.LENGTH_SHORT).show();
            if (sectionName=="sections"){
                tabLayout.getTabAt(5).select();
            }else if (sectionName=="network"){
                tabLayout.getTabAt(4).select();
            }else if(sectionName=="devices"){
                tabLayout.getTabAt(3).select();
            }else if(sectionName=="security"){
                tabLayout.getTabAt(2).select();
            }else {
                tabLayout.getTabAt(1).select();
            }


        }
    });

Upvotes: 2

Views: 1677

Answers (4)

sohel.eco
sohel.eco

Reputation: 367

1) Make one method in MainActivity

public void setCurrentTab(int position){

    viewPager.setCurrentItem(position) //your viewpager object

}

2) Change your onClick listener inside code in MyFragment like below

        if (sectionName=="sections"){
            
            
            ((MainActivity)getActivity()).setCurrentTab(4);

        }else if (sectionName=="network"){
            
           ((MainActivity)getActivity()).setCurrentTab(3);

        }else if(sectionName=="devices"){
            
             ((MainActivity)getActivity()).setCurrentTab(2);
        

        }else if(sectionName=="security"){
            
             ((MainActivity)getActivity()).setCurrentTab(1);
        

        }else {
            
             ((MainActivity)getActivity()).setCurrentTab(0);
        }

Upvotes: 2

Ak23
Ak23

Reputation: 398

Please follow below procedure. In MainActivity.java

define global constant int n=default_fragment_no

try {
     Intent intent = getIntent();
     String N = intent.getStringExtra("N");
     n = Integer.parseInt(N);
     }
catch (NumberFormatException e)
     {
      e.printStackTrace();
    }

        viewPager.setCurrentItem(n);

In your fragment

itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TabLayout tabLayout = (TabLayout)v.findViewById(R.id.tabs);

            Toast.makeText(v.getContext(), "click event on more, "+sectionName , Toast.LENGTH_SHORT).show();
            if (sectionName=="sections"){
                Intent intent = new Intent(getActivity(), MainActivity.class);
                intent.putExtra("N", "5");
                 startActivity(intent);
            }else if (sectionName=="network"){
                 Intent intent = new Intent(getActivity(), MainActivity.class);
                intent.putExtra("N", "4");
                 startActivity(intent);
            }else if(sectionName=="devices"){
                 Intent intent = new Intent(getActivity(), MainActivity.class);
                intent.putExtra("N", "3");
                 startActivity(intent);
            }else if(sectionName=="security"){
                 Intent intent = new Intent(getActivity(), MainActivity.class);
                intent.putExtra("N", "2");
                 startActivity(intent);
            }else {
                 Intent intent = new Intent(getActivity(), MainActivity.class);
                intent.putExtra("N", "1");
                 startActivity(intent);
            }


        }
    });

Upvotes: 0

Gundu Bandgar
Gundu Bandgar

Reputation: 2603

Add this code in your adapter

itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {

 if (sectionName=="sections"){
        ((MainActivity) mContext).mViewPager.setCurrentItem(5);
    }else if (sectionName=="network"){
        ((MainActivity) mContext).mViewPager.setCurrentItem(4);
    }else if(sectionName=="devices"){
        ((MainActivity) mContext).mViewPager.setCurrentItem(3);
    }else if(sectionName=="security"){
        ((MainActivity) mContext).mViewPager.setCurrentItem(2);
    }else {
        ((MainActivity) mContext).mViewPager.setCurrentItem(1);
    }
  }
});

Upvotes: 1

Daniyal Nasir
Daniyal Nasir

Reputation: 148

The easiest way to communicate between your activity and fragments is using interfaces. The idea is basically to define an interface inside a given fragment A and let the activity implement that interface.

Once it has implemented that interface, you could do anything you want in the method it overrides.

There is a good tutorial on how to do exactly this kind of thing.

I hope this was helpful to you!

Upvotes: 2

Related Questions