Context Menu的使用+为ListView绑定监听器——开源项目Standup Timer学习总结(二)
2012-06-25 13:49
811 查看
android的context menu上下文菜单,长按某一选项,就会显示出来。
SDK上的描述:Context Menu A floating list of menu items that appears when the user performs a long-press on a View.
(一)Standup Timer中的例子
ContextMenu的使用也比较简单和OptionsMenu相似,先添加XML文件,然后重载对应的方法成员。
首先在res文件夹下新建menu目录,然后往里面添加menu的XML 文件。OptionsMenu 和 ContextMenu格式的是一样的。
item:每一个item对应一项菜单。
android:icon:用于指定菜单显示的图标。
android:title:菜单的标题,显示在图标下面。
关于Menu的更多属性设置请查看SDK上的 Menu
Resource。
第二步是重写 onCreateContextMenu方法。
代码
接下来是处理菜单的点击事件
代码
这里我们使用AdapterContextMenuInfo 来获取上下文菜单
获取对应VIEW 的信息。.position 在这里返回了ListActivity中的位置,
The position in the adapter for which the context menu is being displayed.
ContextMenu和OptionsMenu主菜单不同的是上下文菜单需要使用registerForContextMenu进行注册,否则将无法显示。
代码
(二)我的项目 :移动图书馆 中的例子
通过学习上面的开源项目之后,自由也完善了正在做的项目:
输入关键字进行搜索之后,进去结果显示界面,然后通过对每一个ListView绑定单击监听器和长按截听器(集Context Menu)。
首先第一步,绑定单击监听器:
因为booklist的声明为:List<HashMap<String,String>> booklist;所以上面的t需要强制转化为HashMap<String ,String>类型。
第二步,创建Conttext Menu.
覆盖以下两个方法:
最后当然不要忘记了在onCreate()方法中注册:
当长按某一项时效果如下:
选择以上的一个选项时,效果如下:
SDK上的描述:Context Menu A floating list of menu items that appears when the user performs a long-press on a View.
(一)Standup Timer中的例子
使用步骤
ContextMenu的使用也比较简单和OptionsMenu相似,先添加XML文件,然后重载对应的方法成员。首先在res文件夹下新建menu目录,然后往里面添加menu的XML 文件。OptionsMenu 和 ContextMenu格式的是一样的。
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/deleteTeam" android:title="@string/delete" android:icon="@android:drawable/ic_menu_delete" /> </menu>
item:每一个item对应一项菜单。
android:icon:用于指定菜单显示的图标。
android:title:菜单的标题,显示在图标下面。
关于Menu的更多属性设置请查看SDK上的 Menu
Resource。
第二步是重写 onCreateContextMenu方法。
代码
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.meetings_context_menu, menu); }
接下来是处理菜单的点击事件
代码
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo(); switch (item.getItemId()) { case R.id.delete_meeting: postionOfMeetingToDelete = info.position; showDialog(CONFIRM_DELETE_MEETING_DIALOG); return true; default: return super.onContextItemSelected(item); } }
这里我们使用AdapterContextMenuInfo 来获取上下文菜单
获取对应VIEW 的信息。.position 在这里返回了ListActivity中的位置,
The position in the adapter for which the context menu is being displayed.
注册菜单
ContextMenu和OptionsMenu主菜单不同的是上下文菜单需要使用registerForContextMenu进行注册,否则将无法显示。代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.teams); //将右键菜单注册给List 控件 registerForContextMenu(getListView()); }
(二)我的项目 :移动图书馆 中的例子
通过学习上面的开源项目之后,自由也完善了正在做的项目:
输入关键字进行搜索之后,进去结果显示界面,然后通过对每一个ListView绑定单击监听器和长按截听器(集Context Menu)。
首先第一步,绑定单击监听器:
list = (ListView)findViewById(R.id.mylist); list.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //通过getItemAtPosition()判断点击的是哪个item,然后强制转化为所某一类型, //总的来说,如若需要重写ListView中的onListItemClick(即响应该项被单击),获取该具体项时,
//其类型由构造ListView的适配器决定。 HashMap<String,String> t = (HashMap<String,String>) arg0.getItemAtPosition(arg2); Toast.makeText(getApplicationContext(), t.get("bookName"),Toast.LENGTH_SHORT).show(); } });总的来说,如若需要重写ListView中的onListItemClick(即响应该项被单击),获取该具体项时,其类型由构造ListView的适配器决定。我的使用的是SimpleAdapter。
//创建适配器 SimpleAdapter sa = new SimpleAdapter( this, booklist, R.layout.main, new String [] {"bookName","bookAuthor","press","date","preserveNum","lendableNum","manageNum"} , new int [] {R.id.bookmane,R.id.author,R.id.press,R.id.date,R.id.preserve,R.id.lendable,R.id.manage} );
因为booklist的声明为:List<HashMap<String,String>> booklist;所以上面的t需要强制转化为HashMap<String ,String>类型。
HashMap<String,String> t = (HashMap<String,String>) arg0.getItemAtPosition(arg2);
单击某项时,效果如下:
第二步,创建Conttext Menu.
覆盖以下两个方法:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.booklist_context, menu); } @Override public boolean onContextItemSelected(MenuItem item) { switch(item.getItemId()){ case R.id.buy_book: Toast.makeText(this, "点击了购书推荐",3000).show(); return true; case R.id.detail: Toast.makeText(this, "点击了书籍详细信息",3000).show(); return true; default: return super.onContextItemSelected(item); } }
最后当然不要忘记了在onCreate()方法中注册:
registerForContextMenu(list);
当长按某一项时效果如下:
选择以上的一个选项时,效果如下:
相关文章推荐
- Opinion Menu的使用——开源项目Standup Timer学习总结(一)
- Dialog使用详解——开源项目Standup Timer学习总结(三)
- PreferenceActivity、SharedPreferences——开源项目Standup Timer学习总结(四)
- ViewGroup,Spinner——开源项目Standup Timer学习总结(五)
- Android 开源项目-StandupTimer学习笔记索引
- 下拉刷新listview 的开源项目学习总结
- 学习和使用开源项目经验总结
- 开源项目SwipeMenuListView使用
- Github开源项目SlidingMenu学习遇到的问题总结
- Net-Snmp工具(学习SNMP的工具,开源项目)简单使用
- android滑动删除的一个开源项目SwipeDelMenuLayout的简单使用
- 使用开源项目的正确姿势,都是血和泪的总结!
- Servlet3.0学习总结(四)——使用注解标注监听器(Listener)
- android ListView布局之三(使用自定义的Adapter绑定数据,通过contextView.setTag绑定数据)有按钮的ListView
- Android studio 使用Gradle发布Android开源项目到JCenter 总结
- 开源项目PullToRefresh详解(四)——PullToRefreshListView和ViewPager的结合使用
- Android studio 使用Gradle发布Android开源项目到JCenter 总结
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
- Maven学习总结(8)——使用Maven构建多模块项目