第一步:定义上下文菜单监听器
//定义监听器
private final OnCreateContextMenuListener mCreateContextMenuListener
= new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.add(0, 0, 0, "修改");
menu.add(0, 1, 0, "删除");
}
};
里面设置了两个菜单 一个是修改 一个是删除
备注:menu.add()函数的四个参数(内容来自网络)
第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项
第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
第四个String类型的title参数,表示选项中显示的文字。
第二步:为Listview设置上下文菜单监听器
listView.setOnCreateContextMenuListener(mCreateContextMenuListener);
第三步:重写响应方法,响应上下文菜单
//响应上下文菜单
@Override
public boolean onContextItemSelected(MenuItem item) {
下面贴一个activity的完整代码:功能为长按ListView条目,出现修改和删除两个菜单,点击每个菜单有不同的操作
package com.sr.my;
import java.util.ArrayList;
import java.util.List;
import cn.bmob.v3.BmobQuery;
import cn.bmob.v3.listener.DeleteListener;
import cn.bmob.v3.listener.FindListener;
import cn.bmob.v3.listener.SaveListener;
import cn.bmob.v3.util.i;
import com.sr.code.Code;
import com.sr.code.CodeMyAdapter;
import com.sr.code.CodeShow;
import com.sr.mytest.CodeList;
import com.sr.mytest.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Identity;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
public class MyPersonalCode extends BaseActivity {
private String ID = "FAILD";
private CodeMyAdapter codeMyAdapter;
private List<Code>itemBeanList;
//定义监听器
private final OnCreateContextMenuListener mCreateContextMenuListener
= new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.add(0, 0, 0, "修改");
menu.add(0, 1, 0, "删除");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.code_list);
itemBeanList = new ArrayList<Code>();
final MyUser myUser = MyUser.getCurrentUser(MyPersonalCode.this, MyUser.class);
//查询当前用户所有的所有条目
BmobQuery<MyCode>query = new BmobQuery<MyCode>();
query.addWhereEqualTo("username", myUser.getUsername());
Log.d("AAA", "t"+myUser.getUsername());
query.findObjects(this, new FindListener<MyCode>() {
@Override
public void onSuccess(List<MyCode> object) {
// TODO Auto-generated method stub
Log.d("B", "t"+object.size());
for(MyCode code : object){
Code newCode = new Code();
newCode.setTitle(code.getUsertitle());
newCode.setContent(code.getUsercode());
Log.d("B", "t"+code.getUsertitle());
Log.d("B", "t"+code.getUsercode());
itemBeanList.add(newCode);
}
ListView listView = (ListView) findViewById(R.id.lv_main);
codeMyAdapter = new CodeMyAdapter(MyPersonalCode.this, itemBeanList);
listView.setAdapter(codeMyAdapter);//第一个参数为context,第二个是数据源
listView.setOnCreateContextMenuListener(mCreateContextMenuListener);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View v, int position, //怎样获取这个对象?
long id) {
// TODO Auto-generated method stub
Intent i = new Intent(MyPersonalCode.this, CodeShow.class);
Code code= (Code) listView.getItemAtPosition(position);
//Log.d("SR", code.getTitle());
i.putExtra(CodeShow.EXTRA_TEXT, code.getTitle());
i.putExtra(CodeShow.EXTRA_CONTENT, code.getContent());
i.putExtra(CodeShow.FROM_WHERE, true);
startActivity(i);
}
});
}
@Override
public void onError(int arg0, String arg1) {
// TODO Auto-generated method stub
}
});
}
//响应上下文菜单
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
final MenuItem itemid = item;
//寻找到对应item的相应对象Code
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
final String title = ((TextView)menuInfo.targetView.findViewById(R.id.code3_title)).getText().toString();
final String content = ((TextView)menuInfo.targetView.findViewById(R.id.code3_content)).getText().toString();
final MyUser myUser = MyUser.getCurrentUser(MyPersonalCode.this, MyUser.class);
//先查询那个objectID,然后再根据objectID在服务器端删除
BmobQuery<MyCode>query = new BmobQuery<MyCode>();
query.addWhereEqualTo("username", myUser.getUsername());
query.addWhereEqualTo("usertitle", title);
query.addWhereEqualTo("usercode", content);
query.findObjects(MyPersonalCode.this, new FindListener<MyCode>() {//查询ID
@Override
public void onError(int arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(List<MyCode> C) {
// TODO Auto-generated method stub
for(MyCode code : C){
ID = code.getObjectId();
break;
}
switch (itemid.getItemId()) {
case 1:
//数据集里删除code数据,因为后面点击删除以后要自动更新视图列表
for(Code code : itemBeanList){
if(code.getTitle() == title && code.getContent() == content)
{
itemBeanList.remove(code);
break;
}
}
//根据ID进行删除
MyCode myCode = new MyCode();
myCode.setObjectId(ID);
myCode.delete(MyPersonalCode.this, new DeleteListener() {
@Override
public void onSuccess() {
// TODO Auto-generated method stub
codeMyAdapter.notifyDataSetChanged();//数据源更新,使得删除后视图列表更新
toast("删除成功");
}
@Override
public void onFailure(int arg0, String msg) {
// TODO Auto-generated method stub
toast("删除失败" + msg);
}
});
break;
case 0://去修改
boolean toEdit = true;
Intent intent = new Intent(MyPersonalCode.this, MyCodeAdd.class);
intent.putExtra(MyCodeAdd.EDIT_IS, toEdit);
intent.putExtra(MyCodeAdd.EDIT_ID, ID);
intent.putExtra(MyCodeAdd.EDIT_CONTENT, content);
intent.putExtra(MyCodeAdd.EDIT_TITLE, title);
startActivity(intent);
break;
}//switch
}//onsuccess
});//findObjects
return false;
}//item
}