- 浏览: 411606 次
文章分类
- 全部博客 (327)
- Android (114)
- Java (13)
- Java基础 (14)
- Glib (2)
- linux (15)
- extjs (5)
- eclipse (2)
- Asterisk (56)
- MYSQL (6)
- 数据库 (9)
- PHP (7)
- C# (18)
- 杂谈~~ (1)
- web开发前端 (3)
- 网络编程 (2)
- Opensips (2)
- voip (3)
- debian (7)
- openfire (15)
- wordpress (1)
- 版本控制 (1)
- Android 线程服务广播 (1)
- SRTP (2)
- 单片机及ARM等 (3)
- 基础知识 (5)
- asp.net (2)
- 单片机 (1)
- 设计模式及架构 (1)
- 安全 (1)
- Cubieboard 草莓树莓各类派 Android开发板 (1)
- J2EE (2)
- BootStrap (3)
- BootStrap web前端开发 (1)
- web前端开发 (4)
- object-c (1)
- openwrt (8)
- 智能家居 (4)
- Node.js (4)
最新评论
-
xiaoxiecomeon:
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能 ...
Runnable 和 Thread -
dotjar:
我觉得话应该这么说:引用TestThread tt = new ...
Runnable 和 Thread -
dagf113225:
调用TelephonyManager的隐藏API是先参考Fra ...
Android提高第十四篇之探秘TelephonyManager
我们在写Android程序的时候,免不了要使用ListView,也免不了要使用ContextMenu,但是如何将其结合起来呢。比如Contacts程序是如何删除练习人的呢。
添加或则删除一个tem有不同的方式,添加Item可以使用ListView自身带的add()方法即可,但是在ContextMenu中删除这个Item还是有些麻烦的。
下面是一个小例子:
1、可以在EditText中输入内容后动态添加Item
2、可以在ContextMenu中添加(但只能添加同一个Item)
3、可以点击Item直接删除Item
4、可以长按Item后弹出ContextMenu来删除Item
看代码:
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/additem" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="4" android:text="添加" /> </LinearLayout> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
ArrayAdapterTest.java
package com.loulijun.arrayadapter; import java.util.ArrayList; import android.app.ListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; public class ArrayActivity extends ListActivity { private EditText inputtext; private Button btnadd; private ArrayList<String> list = new ArrayList<String>(); ArrayAdapter<String> adapter; private static final int ITEM1=Menu.FIRST; private static final int ITEM2=Menu.FIRST+1; private static final int ITEM3=Menu.FIRST+2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 这里虽然是继承了ListActivit,但是如果想使用自己的布局, * ListView中的id必须是“@android:id/list”,否则出错 */ setContentView(R.layout.main); inputtext = (EditText)findViewById(R.id.edittext); btnadd = (Button)findViewById(R.id.additem); adapter = new ArrayAdapter<String>( this, android.R.layout.simple_expandable_list_item_1, list); //设置适配器 setListAdapter(adapter); //为 ListView 的所有 item 注册 ContextMenu this.registerForContextMenu(getListView()); btnadd.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { list.add(inputtext.getText().toString()); adapter.notifyDataSetChanged(); inputtext.setText(""); } }); } //设置Context,用来进行删除操作 @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); list.remove(position); adapter.notifyDataSetChanged(); Toast.makeText(getApplicationContext(), "删除此项", Toast.LENGTH_SHORT).show(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("提示信息"); menu.setHeaderIcon(R.drawable.icon); menu.add(0,ITEM1,0,"删除Item"); menu.add(0,ITEM2,0,"添加Item"); menu.add(0,ITEM3,0,"关于我"); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo(); switch(item.getItemId()) { case ITEM1: //System.out.println("Item id="+item.getItemId()); //System.out.println("position="+getListAdapter().getItemId(menuInfo.position)); /** * getListAdapter().getItemId(menuInfo.position)返回的值是Long型, * 而list.remove(position)是String java.util.ArrayList.remove(int index), * 所以当执行到这里的时候,如果直接使用Long型的话,由于不是int型的,所以默认 * 使用的是:boolean java.util.ArrayList.remove(Object object) * 两个remove()不匹配,所以重载的是remove(Object object),而这个方法是不能删除item的 * 所以需要将得到的position强制转换为int型的才能运行 */ //list.remove(getListAdapter().getItemId(menuInfo.position));这句话是错误的 int pos = (int) getListAdapter().getItemId(menuInfo.position); if(list.remove(pos) != null) { System.out.println("success"); } else { System.out.println("failed"); } adapter.notifyDataSetChanged(); Toast.makeText(getApplicationContext(), "删除此项", Toast.LENGTH_SHORT).show(); break; case ITEM2: list.add("我是花郎!"); adapter.notifyDataSetChanged(); break; case ITEM3: Toast.makeText(getApplicationContext(), "我是花郎!", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } }在这里需要说明几点:
1、本程序是继承ListActivity,但是又用到了自己定义的布局文件。注意,这里的布局文件一定要包含ListView,并且id必须是"@android:id/list",否则会报错 2、 getListAdapter().getItemId(menuInfo.position)返回的值是Long型, 而list.remove(position)是String java.util.ArrayList.remove(int index), 所以当执行到这里的时候,如果直接使用Long型的话,由于不是int型的,所以默认使用的是:boolean java.util.ArrayList.remove(Object object) 两个remove()不匹配,所以重载的是remove(Object object),而这个方法是不能删除item的所以需要将得到的position强制转换为int型的才能运行 首先添加几项数据,这是动态添加的 点击2,即可删除该Item 长按3Item,弹出ContextMenu后,点击删除Item 长按任一一个Item,然后点击“添加Item”,可以添加“我是花郎!”这个Item
发表评论
-
直接拿来用!最火的Android开源项目整理
2015-09-16 10:13 601一、代码库 1、from 代码家 整理比较好的源 ... -
探讨android更新UI的几种方法
2014-06-09 23:27 615今天讲的内容非常简单,只是讲讲有关于android界面更新的 ... -
Android 滑动切换页面 以及屏幕手势
2014-05-08 17:49 525手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也 ... -
android 用Achartengine 作图
2014-05-08 16:55 760Achartengine 是google的一 ... -
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
2014-05-08 16:28 768Animation的4个基本动画效果 What is An ... -
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.Vie
2014-05-06 14:43 2931Android错误:Caused by: java.lang ... -
Android Socket通信如何设置超时时间
2014-05-06 14:14 1079其实关于这个问题可能用到的人不会很多,不过我在这里还是说说。 ... -
【转】Android本地语音识别引擎PocketSphinx-语言建模
2014-02-13 10:35 1829Android本地语音识别引擎PocketSphinx- ... -
关于build.prop原始Dalvik虚拟机设定与调整
2013-09-05 10:40 1260原厂S3 台版 1GB Ramsystem/build.pro ... -
Android中Service与IntentService的使用比较
2013-09-04 15:24 1202该博客来自网络——— ... -
android 应用程序Activity之间数据传递与共享的几种途径
2013-08-01 17:24 9061.基于消息的通信机制 Intent ---boud ... -
android数据通信方式
2013-08-01 17:15 911http://www.itkee.com/develope ... -
“android.intent.category.DEFAULT”的目的是什么?
2013-07-31 16:43 5381、要弄清楚这个问题,首先需要弄明白什么是implicit( ... -
集成拨号盘,2句话的事情
2013-07-30 15:45 601<intent-filter> < ... -
Android TabHost动态加载内容总结
2013-07-25 17:49 954前面用继承TabActivity的方法很好的完成了,TabHo ... -
[Android实例] android json
2013-07-17 15:20 653import java.io.ByteArrayOutput ... -
android json解析及简单例子
2013-07-17 15:19 932JSON的定义: 一种轻量级的数据交换 ... -
AsyncTask的用法-UI刷新发放
2013-07-15 14:50 665在开发Android应用时必须遵守单线程模型的原则: A ... -
java.lang.OutOfMemoryError处理错误
2013-07-15 14:41 671java.lang.OutOfMemoryError异常解决 ... -
关于android.view.WindowLeaked异常的解决方案
2013-07-15 10:34 613Android.view.WindowLeaked按字面了解, ...
相关推荐
当查询结果返回后,我们可以在ListView控件中逐条添加数据。假设ListView控件已经添加到窗体上,且有对应的列名(如ID、Name和Date),可以通过以下方式填充数据: ```csharp while (reader.Read()) { ListView...
在`ContextMenu`的XML布局文件中,我们可以使用`<menu>`标签作为根元素,然后添加`<item>`标签来定义每个菜单项。例如: ```xml <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item ...
本篇文章将深入探讨如何在ListView中实现单击和长按事件,弹出上下文菜单(ContextMenu)。这通常用于提供针对列表项的快捷操作,提升用户体验。 首先,我们需要在清单文件(`AndroidManifest.xml`)中为我们的Activity...
创建一个`ListViewItem`,并设置其文本,然后将其添加到ListView的Items集合中: ```csharp ListViewItem item = new ListViewItem("行1数据"); listView1.Items.Add(item); ``` 删除行通常是通过选择ListView中的...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。`Listview 长按弹出菜单`的功能可以极大地提升用户体验,使得用户在查看列表项时能快速执行相关操作。本教程将深入讲解如何实现这个功能,以及...
本篇文章将深入探讨在ListView上实现右击菜单、排序功能以及如何添加条目,这些都是Android开发中常见的需求。 首先,我们来讨论如何在ListView上实现右击菜单。在Android中,右击菜单通常通过上下文菜单(Context ...
为了使`ListView`中的每个项目都能弹出`ContextMenu`,需要在适配器的`getView()`方法中设置长按监听器: ```java @Override public View getView(int position, View convertView, ViewGroup parent) { // ... ...
3. **处理菜单项点击**:你需要重写`onContextItemSelected(MenuItem item)`方法来处理用户在`ContextMenu`中选择的项。每个菜单项都有一个唯一的ID,你可以根据这个ID来执行相应的操作。 ```java @Override ...
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。`ListView长按显示菜单` 是一个常见的交互设计,允许用户通过长按列表项(ListView中的每一行)来触发一个上下文相关的操作菜单,提供了对...
首先,`ContextMenu`的创建需要在`Activity`或`Fragment`中注册,并通过`registerForContextMenu()`方法指定需要添加上下文菜单的视图。例如,如果你有一个`ListView`,你可能会这样做: ```java public class ...
为了增加交互性,我们常常需要为ListView添加上下文菜单(ContextMenu),它会在用户长按列表项时弹出,提供针对该列表项的操作选项。以下将详细介绍如何在Android中为ListView创建上下文菜单。 首先,我们需要在布局...
在安卓(Android)开发中,`ContextMenu`是一个重要的交互元素,它允许用户在长按某个视图或项目时显示一个包含多个操作选项的菜单。这个压缩包文件“安卓Android源码——ContextMenu 上下文选项菜单,长按后跳出...
例如,对于一个ListView,你可以在Adapter的`getView`方法中添加监听器。 ```java view.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { @Override public void onCreateContextMenu...
此外,了解`ContextMenu.ContextMenuInfo`接口也很关键,这个接口提供了关于触发ContextMenu的视图的额外信息,比如在ListView中,它可以告诉你被长按的是哪一行数据。 总的来说,ContextMenu是Android应用中提高...
在C#编程中,ListView控件是一个非常常用且功能强大的组件,主要用于展示列表形式的数据,常见于各种桌面应用和Windows Forms程序中。本篇将详细探讨`ListView`控件的使用,结合`T392413343`论坛问题的回答,我们将...
在上面的代码中,我们为ListView注册了ContextMenu,并在`onCreateContextMenu()`中添加了两个菜单项:删除和分享。 5. **菜单图标和分组** 除了文字之外,你还可以为菜单项添加图标。使用`menu.add(int group, ...
在Android应用开发中,ContextMenu是实现用户长按操作后弹出功能菜单的一种常见方式。它为用户提供了一种快捷的操作选项,通常在ListView、GridView或TextView等可点击元素上使用。本教程将深入探讨如何在Android中...
2. **定义菜单项**:在对应的Activity或Fragment中重写`onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)`方法,这里可以添加菜单项并设置它们的标题、图标和点击事件。...
在`getView()`方法中,我们将根据`ListViewItem`的数据来设置每个列表项的图标和文本。 ```java public class CustomListViewAdapter extends BaseAdapter { private Context context; private List<ListViewItem...
ListViewItem item = new ListViewItem(e.ProgressPercentage.ToString()); item.ImageIndex = listView.ImageList.Images.Add(Image.FromFile(e.UserState.ImagePath)); item.SubItems.Add(e.UserState.Url); ...