Reputation: 43
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
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
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
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
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