搞了这么多天,终于要开始重新写笔记,以前觉得这个方法实在是很爽,既能搞到下载分,还能督促自己好好学习,天天上网。由于自己自制力不行,加之加之几个寝室里几个狐朋狗友的怂恿和放纵,写着写着就没了,经过前几天的盗号风波,以前的笔记只留了两篇,再次BS不要脸的盗号的。
今天学的是android的选项菜单和它的子菜单,还有view的上下文菜单,由于view的上下文菜单和dialog类似,这里不提了
选项菜单是我们拿着爱机按下menu键时,从地下冒出来的一个小框框,里面显示最多六个按钮,当然自己可以添加很多的,不过只能显示六个在第一级,更不要脸的是menuitem不是从view来的,独立的一个接口,这使得我看了好半天的源代码和文档,擦。
menuitem是 activity里面自带的,要自己定义的时候重写方法Oncreateoptionmenu,这个方法有个menu参数,其实就是地下的小框框的实例啦,然后根据这个menu,你就可以对下面的menuitem进行编程了,oncreateoptionmenu方法是一次性的,当你第一次点击爱机上的menu按钮时,这个方法被调用,调用之后就不会执行第二次了,如果你嫌敲代码麻烦,没关系,创建一个menu的布局文件,这样的话,你就可以直接加载文件,而不用敲那些不要脸的代码了
系统创建一个menu以后,怎么办,上面有按钮啊,不能光看着按钮做事吧,赶紧重写onoptionselectedmenu方法啊,这里会用到一个switch,妹办法,我没有更好的方法了,当然,如果有些按钮的功能相似,不妨建个group,这样可以了,收编管理,事半功倍。
写了一个小练习,在edittext中显示从menu中选中的信息,代码如下:(只写重要部分了)
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.boy_or_gril, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
private String str = "\n";
private String xingbie = "";
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.boy:
xingbie = item.getTitle().toString();
item.setChecked(item.isChecked());
break;
case R.id.grid:
xingbie = item.getTitle().toString();
item.setChecked(item.isChecked());
break;
case R.id.swimming:
str = str + "爱好:游泳\n";
item.setChecked(!item.isChecked());
break;
case R.id.singing:
str = str + "爱好:唱歌\n";
item.setChecked(!item.isChecked());
break;
case R.id.IT:
str = str + "爱好:编程";
item.setChecked(!item.isChecked());
break;
case R.id.item3:
edittext.setText(xingbie+str);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
有问题的是多选项,没有判定是否选定的情况下来添加字符串
有点纠结,只能悄悄的搞