ListView上下文菜单创建

第一步:定义上下文菜单监听器

//定义监听器
    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
}





你可能感兴趣的:(ListView上下文菜单创建)