您的位置:首页 > 移动开发 > Android开发

android的Context Menu菜单

2014-06-20 18:36 351 查看
Context Menu菜单是一个浮动式列表菜单,长时间单击一个窗口时会跳出上下文菜单。

本文主要的涉及的内容:

1:ListView的使用:

2:Context Menu菜单的使用

3:通过Context Menu菜单删除和修改ListView的内容

开发环境:android4.0 ,小米1S ,Eclipse</p><p>

一:显示ListView内容

activity_menu布局文件为:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Menu4OptionActivity" >

<ListView
android:id="@+id/menuoptionlistView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" >
</ListView>

</RelativeLayout>

Activigy类为:

public class Menu4OptionActivity extends Activity {
private static final int LISTVIEW_LENGTH = 10;
ListView listview;
ArrayAdapter<CharSequence> adapter;
LinkedList<CharSequence> contentList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
listview = (ListView) findViewById(R.id.menuoptionlistView1);
contentList = new LinkedList<CharSequence>();
/**
* ListView中显示的内容
*/
for (int i = 0; i < LISTVIEW_LENGTH; i++) {
contentList.add("Listview Content " + i);

}
/**
* ListView的适配器,这里使用的是
*/
adapter = new ArrayAdapter<CharSequence>(this,
android.R.layout.simple_list_item_1, contentList);
listview.setAdapter(adapter);
//将ListView注册到Context Menu
registerForContextMenu(listview);

}
}




效果图为:



二:显示Context Menu

要显示Context Menu要覆盖 onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) 方法

private static final int CONTEXT_REMOVE_ID1 = 0;
private static final int CONTEXT_MODIFY_ID2 = 1;

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
/**
* 这里使用的是代码添加弹出的菜单中内容
* 也可通过getMenuInflater().inflate(R.menu.cmenu, menu)加载定义好的xml布局
*/
menu.add(0, CONTEXT_REMOVE_ID1, 0, "删除");
menu.add(0, CONTEXT_MODIFY_ID2, 1, "修改");
super.onCreateContextMenu(menu, v, menuInfo);
}
显示的效果图为:



三:实现修改和删除操作

需要覆盖Activity的onContextItemSelected(MenuItem item)的方法。当选择不同的Context Menu内容时,触发不同的操作。

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
.getMenuInfo();
final int id = (int) menuInfo.id;// 获取ListView中各个View的id
switch (item.getGroupId()) {
case 0:
/**
* 删除操作
*/
if (item.getItemId() == CONTEXT_REMOVE_ID1) {

contentList.remove(id);
adapter.notifyDataSetChanged();
Toast.makeText(this, "已经成功删除内容" + id, Toast.LENGTH_LONG).show();
}
/**
* 修改操作:
*/
if (item.getItemId() == CONTEXT_MODIFY_ID2) {
View view = (View) getLayoutInflater().inflate(
R.layout.only_textview, null);
final EditText text = (EditText) view
.findViewById(R.id.menu_editText1);
final TextView textView = (TextView) menuInfo.targetView;// 得到ListView中的Adater中存储的View
text.setText(textView.getText());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("modify content");
builder.setView(view);
builder.setNegativeButton("back", null);
builder.setPositiveButton("close", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
contentList.set(id, text.getText());
adapter.notifyDataSetChanged();
}
}).show();

}
}

return super.onContextItemSelected(item);
}




点击删除的效果为:下图表示的是删除ListView Content 0和ListView Content 0的效果图:



点击修改按钮的效果:下图表示的是将ListView Content 2修改为modify的效果图





参考文献:

1:http://blog.csdn.net/cjjky/article/details/6881582

2:android2.3应用开发实战--第八章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: