MainActivity
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
registerForContextMenu(tv);//2、给指定控件注册上下文菜单
}
/*1、创建上下文菜单*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//加载菜单文件
getMenuInflater().inflate(R.menu.menu1,menu);
//添加菜单项,参数1.分组id,2.菜单项id,3.排序,数字越大越在上面,4.菜单的标题
menu.add(1,1,6,"菜单1");
menu.add(1,2,5,"菜单2");
menu.add(1,3,4,"菜单3");
//对组设置样式(是否选中以及单选或多选),参数1,组的id,2.是否被选中的样式,3.true为单选,false为多选
menu.setGroupCheckable(1,true,false);
//添加含有子菜单的项
SubMenu sub = menu.addSubMenu(2, 4, Menu.NONE, "子菜单4");
//添加子菜单
sub.add(3,5,Menu.NONE,"我是菜单1");
sub.add(3,6,Menu.NONE,"我是菜单2");
}
/*上下文菜单被选中事件*/
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.item1://字体变大
tv.setTextSize(24);
break;
case R.id.item2://字体颜色
tv.setTextColor(Color.RED);
break;
case 1://选中菜单1
break;
case R.id.item3://跳转
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
break;
}
return super.onContextItemSelected(item);
}
}
Main2Activity
public class Main2Activity extends AppCompatActivity {
private ListView lv;
List<Map<String,String>> list=new ArrayList<>();
SimpleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
lv=(ListView)findViewById(R.id.lv);
for (int i=0;i<20;i++){
Map<String,String> map=new HashMap<>();
map.put("id",String.valueOf(i));
map.put("name","我是"+i);
list.add(map);
}
//实例化SimpleAdapter,作用是加载2列以上的数据
//参数1.上下文对象,2.数据源,3.行要加载的布局文件,4.从哪个键上取值,5.放到哪个控件上,
adapter=new SimpleAdapter(this,list,R.layout.list_item,
new String[]{"id","name"},new int[]{R.id.tv_id,R.id.tv_name});
lv.setAdapter(adapter);
registerForContextMenu(lv);//注册上下文菜单
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(1,1, Menu.NONE,"增加");
menu.add(1,2, Menu.NONE,"删除");
menu.add(1,3, Menu.NONE,"修改");
menu.add(1,4, Menu.NONE,"查看详情");
}
/*做删除,1.获取索引,2.从List数据源中删掉索引对应的项,3.刷新ListView*/
@Override
public boolean onContextItemSelected(MenuItem item) {
//获取菜单项的菜单信息,并强制转换为AdapterContextMenuInfo,
AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int position = info.position;//取出litView对应的索引
switch (item.getItemId()){
case 1://增加
break;
case 2://删除
//从数据源中删除索引对应的项
list.remove(position);
//刷新数据
adapter.notifyDataSetChanged();
break;
case 3://修改
break;
case 4://查看详情
break;
}
return super.onContextItemSelected(item);
}
}
activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
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="org.frxm.day02_menu.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上下文菜单" />
</RelativeLayout>
activity_main2
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main2"
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="org.frxm.day02_menu.Main2Activity">
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</RelativeLayout>
list_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_id"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="1"/>
</LinearLayout>