【发布时间】:2016-12-20 17:26:12
【问题描述】:
我正在制作一个包含一个包含选项卡布局和 Viewpager 的活动的应用程序,我有 3 个选项卡,每个选项卡都有一个片段。主要活动有一个工具栏,上面有一个开关。
关键是我需要监听主活动和片段中的这个开关的事件变化。实际上我在 MainActivity 中调用了 onCreateOptionsMenu 和 onOptionItemSelected 并且可以工作,但是可以再次在片段中使用此方法吗? o 如何从片段的工具栏中侦听 UI 控件的事件?
小米码是:
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);
}
}
【问题讨论】:
-
您也可以在片段级别覆盖 onCreateOptionsMenu/onOptionsItemSelected 等。您可能会觉得这很方便 - 如果您使用的是 android studio,您可以按 Ctrl+O 来查看可以根据您当前查看的位置覆盖的功能
标签: java android android-fragments fragment android-toolbar