使用ContextMenu
或PopupMenu
均可实现
listview布局
<ListView
android:layout_width="match_parent"
android:layout_height="655dp"
android:id="@+id/listView"></ListView>
private ListView listView;
listView = (ListView) findViewById(R.id.listView);
ContextMenu实现
registerForContextMenu(listView);//进行注册
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
filename=list.get(info.position).getName();//保存选中的文件名
Toast.makeText(getApplicationContext(),"you choose the file : "+filename,Toast.LENGTH_SHORT).show();
menu.add(0,0,0,"删除");
menu.add(0,1,0,"分享");
}
//方法1对应
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0: {
myDialog(filename);
break;
}
case 1:{
share(filename);
break;
}
}
return true;
}
PopupMenu实现
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
File file= list.get(position);
filename=file.getName();
Toast.makeText(getApplicationContext(),"you choose the file : "+filename,Toast.LENGTH_SHORT).show();
showPopupMenu(view);
return true;
}
});
private void showPopupMenu(View v){
//定义PopupMenu对象
PopupMenu popupMenu = new PopupMenu(this, v);
//设置PopupMenu对象的布局
popupMenu.getMenuInflater().inflate(R.menu.menu, popupMenu.getMenu());
//设置PopupMenu的点击事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()){
case R.id.deleteFile:{
myDialog(filename);
break;
}
case R.id.shareFile:{
share(filename);
break;
}
}
return true;
}
});
//显示菜单
popupMenu.show();
}
在menu
文件夹下新建menu.xml
文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/deleteFile" android:title="删除"></item>
<item android:id="@+id/shareFile" android:title="分享"></item>
</menu>
效果展示
实验证明,ContextMenu效果更好,可以直接在所按下之处的正下方显示,但是PopupMenu在Item的正下方显示