ListView:长按弹出上下文菜单(ContextMenu)

来源:互联网 发布:苏联出兵东北知乎 编辑:程序博客网 时间:2024/05/02 04:28

有两种方法实现长按弹出上下文菜单:

方法一:

1)注册上下文菜单


/** * 上下文菜单演示Demo *  * @author CodingMyWorld 2011-8-27 下午03:22:39 */publicclass SampleContextMenuActivity extends ListActivity {    privatestaticfinal String TAG ="SampleContextMenuActivity";    @Override    protectedvoid onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 显示列表        simpleShowList();        // 为所有列表项注册上下文菜单this.registerForContextMenu(getListView());    }    privatevoid simpleShowList() {        // list item        String[] files =new String[] {            "文件1",            "文件2",            "文件3",            "文件4"        };        // simple array adapter        ArrayAdapter<String> adapter =new ArrayAdapter<String>(                this,                 android.R.layout.simple_list_item_1,                files);        // set adapterthis.setListAdapter(adapter);        Log.v(TAG, "show simple list");    }}


2)生成上下文菜单


在activity中重新onCreateContextMenu()方法

@Overridepublicvoid onCreateContextMenu(ContextMenu menu, View v,        ContextMenuInfo menuInfo) {    Log.v(TAG, "populate context menu");    // set context menu title    menu.setHeaderTitle("文件操作");    // add context menu item    menu.add(0, 1, Menu.NONE, "发送");    menu.add(0, 2, Menu.NONE, "标记为重要");    menu.add(0, 3, Menu.NONE, "重命名");    menu.add(0, 4, Menu.NONE, "删除");}



3)响应上下文菜单项

@Overridepublicboolean onContextItemSelected(MenuItem item) {    // 得到当前被选中的item信息    AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();    Log.v(TAG, "context item seleted ID="+ menuInfo.id);        switch(item.getItemId()) {    case1:        // do somethingbreak;    case2:        // do somethingbreak;    case3:        // do somethingbreak;    case4:        // do somethingbreak;    default:        returnsuper.onContextItemSelected(item);    }    returntrue;}




方法二、

1)设置上下文菜单监听

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.timing_sms_list_screen);mTimingListView = getListView();mEmptyView = (LinearLayout)findViewById(R.id.timing_empty_view);//mTimingListView.setEmptyView(mEmptyView);doQuery();mTimingListView.setOnCreateContextMenuListener(mConvListOnCreateContextMenuListener);}


2)定义上下文菜单监听器

private final OnCreateContextMenuListener mConvListOnCreateContextMenuListener = new OnCreateContextMenuListener() {@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {Toast.makeText(getApplicationContext(), "onCreateContextMenu()", 1000).show();menu.add(0, MENU_DELETE, 0, R.string.ti_delete);menu.add(0, MENU_EDIT, 1, R.string.ti_edit);menu.add(0, MENU_SEND_IMMEDIATE, 2, R.string.ti_send_immediately);}};


3)响应上下文菜单项

@Overridepublic boolean onContextItemSelected(MenuItem item) {    TimingSmsDataService service = new TimingSmsDataService(getApplicationContext());    switch (item.getItemId()) {        case MENU_DELETE:        AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();        Toast.makeText(getApplicationContext(), "id: "+info.id, 1500).show();//        service.deleteTimingSmsById(info.id);        break;    }return super.onContextItemSelected(item);}




原创粉丝点击