- 浏览: 825928 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
renzhengzhi:
请教一下楼主,公有云和私有云的开发,具体要做哪些工作呢?我拿到 ...
4,云的4 种模式 -
SangBillLee:
我用了solr5.5,用SolrQuery查询,没法高亮,不知 ...
solr5.x快速入门 -
lw900925:
这翻译读起来真是别扭。
solr in action翻译-第一章1.1 -
springjpa_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring MVC性能提升 -
h416373073:
正遇到了此问题不知如何解决, 多谢分享
solr错误
Android的Menu状态动态设置方法onPrepareOptionsMenu(Menu menu)
2010-11-19 20:00:09| 分类: Android开发笔记 | 标签: |字号大中小 订阅
覆盖onPrepareOptionsMenu(Menu menu)这个方法非常的好用,我们可以定义boolean值来进行判断,如果满足条件就可以把菜单栏动态设置成某些状态,比如是否可见,text值等等。
比如我设定一个布尔值addingNew=flase,然后在其他方法体中对addingNew进行重新赋值。在覆盖onPrepareOptionsMenu(Menu menu)中,我们对addingNew进行判断,如果它的值是ture,我们ID为REMOVE_TODO的菜单项就设置为text=“cancel”。否则,我们ID为REMOVE_TODO的菜单项就设置为text=“remove”。
总之,就是可以进行一些判断,然后动态设置我们的菜单项状态。
另外一点,我们应该积累经验,学会很好的运用boolean值,这在很多地方都很有用。
下面是我的程序,从中可以总结出很多经验。
public class ToDolist extends Activity {
/** Called when the activity is first created. */
static final private int ADD_NEW_TODO=Menu.FIRST;
static final private int REMOVE_TODO=Menu.FIRST+1;
private boolean addingNew=false;//设置这个值来进行控制
private ListView myListView;
private EditText myEditText;
private ArrayList<String> todoItems;
private ArrayAdapter<String> aa;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myListView=(ListView)findViewById(R.id.myListView);
myEditText=(EditText)findViewById(R.id.myEditText);
todoItems=new ArrayList<String>();
int resID=R.layout.todolist;
aa=new ArrayAdapter<String>(this, resID, todoItems);
myListView.setAdapter(aa);
myEditText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==KeyEvent.ACTION_DOWN){
if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
todoItems.add(0, myEditText.getText().toString());
aa.notifyDataSetChanged();
myEditText.setText("");
cancelAdd();//初始设定REMOVE_TODO菜单项不可见,myEditText不可见
return true;
}
}
return false;
}});
registerForContextMenu(myListView);//设置myListView为一个ContextMenu的接收者
}
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
MenuItem itemAdd=menu.add(0, ADD_NEW_TODO, Menu.NONE, R.string.add_new);
MenuItem itemRem=menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
itemAdd.setIcon(R.drawable.add_new_item);
itemRem.setIcon(R.drawable.remove_item);
itemAdd.setShortcut('0', 'a');
itemRem.setShortcut('1', 'r');
return true;
}
public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Selected To Do Item");
menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
}//创建了ContextMenu
@Override
public boolean onPrepareOptionsMenu(Menu menu){
super.onPrepareOptionsMenu(menu);
int idx=myListView.getSelectedItemPosition();
//通过addingNew的判断来确定REMOVE_TODO的text的值
String removeTitle=getString(addingNew? R.string.cancel:R.string.remove);
MenuItem removeItem=menu.findItem(REMOVE_TODO);
removeItem.setTitle(removeTitle);
//只有当在添加的状态下(addingNew=true)或者ListView被selected的情况下REMOVE_TODO菜单项才可见
removeItem.setVisible(addingNew||idx>-1);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
int index=myListView.getSelectedItemPosition();
switch(item.getItemId()){
case(REMOVE_TODO):{
//此时的REMOVE_TODO菜单的text可能有两种状态:1.cancel 2.remove
if(addingNew){
//当addingNew=true的时候,REMOVE_TODO菜单的text=“cancel”,这时候我们就执行相应的取消操作
cancelAdd();
}else{
removeItem(index);
//当addingNew=false的时候,REMOVE_TODO菜单的text=“remov”,这时候我们就执行相应的删除操作
}
return true;
}
case(ADD_NEW_TODO):{
addNewItem();
return true;
}
}
return false;
}
@Override
public boolean onContextItemSelected(MenuItem item){
super.onContextItemSelected(item);
switch (item.getItemId()){
case(REMOVE_TODO):{
AdapterView.AdapterContextMenuInfo menuInfo;
menuInfo=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int index=menuInfo.position;
removeItem(index);
return true;
}
}
return false;
}
//在下面3个方法总执行相应的工作,并且对addingNew进行控制
private void addNewItem() {
// TODO Auto-generated method stub]
addingNew=true;
myEditText.setVisibility(View.VISIBLE);
myEditText.requestFocus();
}
private void removeItem(int _index) {
// TODO Auto-generated method stub
todoItems.remove(_index);
aa.notifyDataSetChanged();
}
private void cancelAdd() {
// TODO Auto-generated method stub
addingNew=false;
myEditText.setVisibility(View.GONE);
}
}
onPrepareOptionsMenu 和onCreateOptionsMenu 的区别
在android中创建菜单menu时需要重写Activity的onCreateOptionsMenu(Menumenu)方法,这个方法只在第一次创建的时候调用一次,所以如果之后想对menu进行动态的修改,那么就不能再对onCreateOptionsMenu做什么手脚,就要用到onPrepareOptionsMenu(Menumenu)方法了。
onPrepareOptionsMenu与onCreateOptionsMenu不同的是,他在每次按下menu硬键之前会被调用,所以可以在这里动态的改变menu。
注意:在onPrepareOptionsMenu(Menumenu)函数中,首先需要调用:
super.onPrepareOptionsMenu(menu);
menu.clear();
如果没有clear而直接add的话,那么菜单中菜单项是会“追加”的,这样随着你不停的点menu键,菜单项就不停的增加。
另外,android系统默认的菜单样式是支持最多3个一行,如果有4项就每行2个有2行...如果想自定义样式,可以使用xml文件定义样式。
发表评论
-
Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法 .
2013-10-10 11:38 1180问题描述使用SDK Manager ... -
android 对话框中的进度条 (ProgressDialog)
2012-03-10 00:16 2557显然要定义对话框进 ... -
Android开发学习笔记WebView
2012-02-28 21:59 5110WebView(网络视图)能加载 ... -
Android ListView理解之BaseAdapter .
2012-02-28 21:43 2038ListView是Android开发过程中较为常见的组件之一, ... -
AsyncTask的用法
2012-02-27 21:36 881在开发Android应用时必须遵守单线程模型的原则: An ... -
android中的ellipsize
2012-02-26 17:47 1061最近为了解决某个bug,textview中内容过长的话自动 ... -
BaseExpandableListAdapter
2012-02-26 17:40 1545转载自:中国手机开 ... -
使用命令安装apk的方法
2012-02-26 15:44 1686使用命令安装apk的方法, 第一步,将应用防止在androi ... -
Android PendingIntent和Intent的区别
2012-02-16 22:39 1719以前在学习AlarmManager里面会遇到PendingI ... -
android中gallery的使用
2012-02-13 22:52 25081,创建配置文件 <?xml version=&quo ... -
android的tabHost的使用
2012-02-13 22:10 1562废话不多,直接介绍怎么使用 1,用几个tab,就建立几个ta ... -
android源码解析之二ApplicaitonInfo和PackageManager
2012-02-07 13:26 2240ApplicationInfo ApplicationIn ... -
android源码解读一(Context)
2012-02-05 21:13 4246Context类 Context是一个抽象类 public ... -
android 属性android:visibility
2012-02-05 12:16 931此属性意思是此视图是否显示, 例如RelativeLayou ... -
android默认焦点设置的方法
2012-02-05 12:13 18894在使用到文本框(EditText)来进行数据录入的时候,有时默 ... -
imageView.setScaleType
2012-02-03 17:36 5977imageView.setScaleType(ImageVie ... -
文件在SD卡存储
2012-02-02 10:47 1749手机的存储空间分俩种,一种是手机自带的,另一种是SD卡,(外存 ... -
广播接收者
2012-02-02 10:45 1211广播接受者(BroadcastReceiv ... -
android的服务
2012-02-02 10:45 972服务android中服务和window中的服务是类似的东西,服 ... -
android资源的应用
2012-02-02 10:43 1452color颜色在配置文件中定义路径:res/values/co ...
相关推荐
Android Menu的使用方法介绍,包含OptionMenu,ContextMenu等
方法名 触发时间onCreateOptionsMenu 进入Launcher后第一次点MENU按钮时触发onPrepareOptionsMenu 有两种情况:1、进入Launcher后第一次点MENU按钮触发onCreateOptionsMenu后调用;2、经过第一步,以后每次点MENU...
android menu菜单距中显示
使用ActionBar+Fragment+ViewPager+Menu实现的动态切换Menu的下过,每当用户切换到一个Fragment时,与之对应的Menu效果就随之切换,本例共有三个Fragment,每切换到一个Fragment上方的MenuItem的样式就会生成一个新...
第一种方法,通过Layout来添加静态菜单元素 第二种方法,在Activity类中动态创建Menu
android Menu菜单。android Menu菜单。android Menu菜单。android Menu菜单。
android Menu 和 RadioGroup RadioButton的用法
Android Menu和ListView 整合设计 源码 package com.MyMenu; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import ...
AndroidMenu控件源码 AndroidMenu控件源码 AndroidMenu控件源码
android里使用menu,包括OptionMenu、ContextMenu、SubMenu,适合初学者,非常简单的代码,另外里面还附加了一个word文档教程,欢迎广大初学android的朋友下载使用!注释也很多的!
在android的状态栏(statusbar)中增加menu,home和back快捷键的方法 framework里 修改的
android 另类menu菜单提示android 另类menu菜单提示android 另类menu菜单提示android 另类menu菜单提示android 另类menu菜单提示
Android menu单选菜单.rar
综合网上资源改写的android menu演示程序,实现了Slide,Dropdown,Circle,Spring,Tabbar和Popup等6种风格的Menu,每一种都增加了动态构造和事件接口,方便使用和调用。
android 以动态列表配置选项 ListActivity 与Menu整合技巧
Android-NavMenu-master一个底部导航栏, 实现了显示未读消息数, 显示红点等效果的封装
android menu学习 基础学习,menu 各种属性基本都包含,新手可以下载看看
Android 按Menu弹出菜单,九宫格样式。
Android Menu用法全面讲解。这是博客《Android Menu用法全面讲解》的示例项目。
这是一个关于Android 单选菜单的简单源码,供学习使用。