Im Making an App that consist in One activity with a tablayout and a Viewpager, I have 3 tabs where each tab has a fragment. The main activity has a Toolbar with a Swich on it.
The point is that I need listen events changes from this switch in the main activity and the fragments. Actually I called onCreateOptionsMenu and onOptionItemSelected in MainActivity and works but Is possible use this methods in fragments again? o How can I listen events from UI controls in the toolbar from a fragment?
Mi Code is:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
}else{
if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)){
Toast.makeText(MainActivity.this,"Debes autorizar los permisos de ubicacion",Toast.LENGTH_SHORT).show();
}else{
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_REQUEST_CODE);
}
}
}
private void setupViewPager(ViewPager viewPager){
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new OneFragment(), getString(R.string.tabRedes));
adapter.addFragment(new TwoFragment(),getString(R.string.tabRedesGuardadas));
adapter.addFragment(new ThreeFragment(),getString(R.string.tabMapas));
viewPager.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menuactionbar,menu);
final SwitchCompat switch1= (SwitchCompat) menu.findItem(R.id.switch_wifi).getActionView().findViewById(R.id.switchForActionBar);
if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
switch1.setChecked(wifiManager.isWifiEnabled());
if(wifiManager.isWifiEnabled()){
switch1.setText(R.string.switchOnWifiEs);
}else {
switch1.setText(R.string.swtichOffWifiEs);
//wifiManager.setWifiEnabled(true);
}
switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
switch1.setText(R.string.switchOnWifiEs);
wifiManager.setWifiEnabled(true);
Toast.makeText(MainActivity.this,R.string.switchingOnWifiEs,Toast.LENGTH_SHORT).show();
}
else{
switch1.setText(R.string.swtichOffWifiEs);
wifiManager.setWifiEnabled(false);
Toast.makeText(MainActivity.this,R.string.switchingOffWifiEs,Toast.LENGTH_SHORT).show();
}
}
});
}else{
if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)){
Toast.makeText(MainActivity.this,"Debes autorizar los permisos de ubicacion",Toast.LENGTH_SHORT).show();
}else{
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_REQUEST_CODE);
}
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.menu_settings:
Intent nav = new Intent(MainActivity.this,configuracion_Activity.class);
startActivity(nav);
return true;
case R.id.menu_acercade:
Intent nav2 = new Intent(MainActivity.this,acercade_Activity.class);
startActivity(nav2);
return true;
default:
Toast.makeText(MainActivity.this,"Estas entrando en e Default",Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
}
In your CheckedChangeListener of Switch
switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
switch1.setText(R.string.switchOnWifiEs);
wifiManager.setWifiEnabled(true);
Toast.makeText(MainActivity.this,R.string.switchingOnWifiEs,Toast.LENGTH_SHORT).show();
}
else{
switch1.setText(R.string.swtichOffWifiEs);
wifiManager.setWifiEnabled(false);
Toast.makeText(MainActivity.this,R.string.switchingOffWifiEs,Toast.LENGTH_SHORT).show();
}
final Fragment currentFragment = getFragmentManager().findfragmentId(R.id.container);
if(currentFragment instance HomeFragment){
((HomeFragment)currentFragment).switchClicked(isChecked);
}
}
});
In your fragment :
public void switchClicked(final boolean isChecked){
...... your code.
}