我是否可以知道如何在ActionBar中添加Switch小部件并处理click事件或切换更改事件。
现在我可以在ActionBar中对Switch进行充气但无法响应change事件。我在下面添加了main.xml。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.MainActivity" >
<item
android:id="@+id/toggleservice"
android:actionViewClass="android.widget.Switch"
android:showAsAction="ifRoom"
android:title="@string/toggle_service"/>
</menu>
我想在用户点击交换机并更改其状态时启动服务。任何帮助都非常感谢。
答案 0 :(得分:16)
您需要致电MenuItem.getActionView
,这是一个例子:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate your Menu
getMenuInflater().inflate(R.menu.your_menu, menu);
// Get the action view used in your toggleservice item
final MenuItem toggleservice = menu.findItem(R.id.toggleservice);
final Switch actionView = (Switch) toggleservice.getActionView();
actionView.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// Start or stop your Service
}
});
return super.onCreateOptionsMenu(menu);
}
答案 1 :(得分:0)
对于那些使用Xamarin的人。这是adneal答案的翻译版本:
private Switch _actionViewSwitch;
public override bool OnCreateOptionsMenu(IMenu menu)
{
MenuInflater.Inflate(Resource.Menu.main_activity_actions, menu);
var menuItem = menu.FindItem(Resource.Id.toggleservice);
_actionViewSwitch = (Switch) menuItem.ActionView;
_actionViewSwitch.CheckedChange += ActionViewOnCheckedChange;
return base.OnCreateOptionsMenu(menu);
}
private void ActionViewOnCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs checkedChangeEventArgs)
{
// ToDo: stuff that happens when switch gets checked.
}