创建OptionMenu和ContextMenu

来源:互联网 发布:合肥科研知乎 编辑:程序博客网 时间:2024/06/05 16:35

今天自学的是创建菜单项,比较简单,直接上代码:

这里主页面布局是用了系统给的id,以至于后面都不用创建ListView对象和关联ListView的id了,挺省事的,不过一个项目有多个ListView时就该自己写id了吧,书上作者偷懒,不怪我。

<ListView android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>
<TextView android:id="@android:id/empty"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textSize="20sp"
    android:text="无歌曲"/>

功能为获取手机音乐类表的主代码:

private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_music);
registerForContextMenu(getListView());// 为列表注册菜单项
ContentResolver resolver = getContentResolver();
//从内容提供者中获得SD卡上的音乐列表
cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
String[] cols = new String[] { MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST };
int[] ids = new int[] { R.id.track_name, R.id.artist };
if (cursor != null) {
startManagingCursor(cursor);
//SimpleCursorAdapter的使用SimpleCursorAdapter(Context, int, Cursor, String[], int[])
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.songs_list, cursor, cols, ids);
setListAdapter(adapter);
}
}

创建OptionMenu菜单:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 添加菜单选项
menu.add(0, 0, 0, "退出");
menu.add(0, 1, 1, "扫描");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
int itemid = item.getItemId();
switch (itemid) {
case 0:
AlertDialog.Builder builder = new Builder(this);
builder.setMessage("是否退出?");
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

// 这里并没有实现对话框显示的功能
dialog.dismiss();
}
});
builder.create().show();
break;
case 1:
AlertDialog.Builder builder1 = new Builder(this);
builder1.setMessage("是否扫描本机?");
builder1.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 这里并没有实现对话框显示的功能
dialog.dismiss();
}
});
builder1.create().show();
break;
}
return true;
}

创建ContextMenu菜单:

这里要在主线程中注册一下registerForContextMenu(getListView());// 为列表注册菜单项

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.context_menu, menu);
// menu.add(0, 0, 0, "删除");
// menu.add(0,1,0,"属性");
Log.i("info", "+++++");
}
@Override
public boolean onContextItemSelected(MenuItem item) {

//获得AdapterContextMenuInfo对象,进而得到当前选中条目的id或position信息
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();

int id = item.getItemId();
switch (id) {
case R.id.ctx_delete:
cursor.moveToPosition(info.position);
AlertDialog.Builder builder = new Builder(this);
builder.setMessage("是否退出?");
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

// 这里并没有实现对话框显示的功能
dialog.dismiss();
}
});
builder.create().show();
break;
case R.id.ctx_property:
cursor.moveToPosition(info.position);
Toast.makeText(this, "属性", 2000).show();
break;
}
return super.onContextItemSelected(item);
}

ContextMenu的context_menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/ctx_delete" android:orderInCategory="1"
        android:menuCategory="container" android:title="删除"/>
<item android:id="@+id/ctx_property" android:orderInCategory="2"
        android:menuCategory="container" android:title="属性"/>
</menu>


0 0
原创粉丝点击