/**
* Demonstration of displaying a context menu from a fragment.
* 该例子展示了从fragment中展示一个上下文菜单
*/
public class FragmentContextMenuSupport extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create the list fragment and add it as our sole content.
//将fragment直接加入到decoreview的content中
ContextMenuFragment content = new ContextMenuFragment();
getSupportFragmentManager().beginTransaction().add(
android.R.id.content, content).commit();
}
public static class ContextMenuFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_context_menu, container, false);
//该方法将上下文菜单设置给了root中的longpress按钮
//该方法的功能就是当长按longpress按钮时,弹出上下文菜单,菜单到底显示什么在下面的两个方法中设置
registerForContextMenu(root.findViewById(R.id.long_press));
// 指向源码:
// public void registerForContextMenu(View view) {
// view.setOnCreateContextMenuListener(this);
//指向:
// public void setOnCreateContextMenuListener(OnCreateContextMenuListener l) {
// if (!isLongClickable()) {
// setLongClickable(true); //可以看到设置了长按事件
// }
// getListenerInfo().mOnCreateContextMenuListener = l;
// }
// }
return root;
}
//添加菜单条目的方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(Menu.NONE, R.id.a_item, Menu.NONE, "Menu A");
menu.add(Menu.NONE, R.id.b_item, Menu.NONE, "Menu B");
}
//菜单条目选择事件
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.a_item:
Log.i("ContextMenu", "Item 1a was chosen");
return true;
case R.id.b_item:
Log.i("ContextMenu", "Item 1b was chosen");
return true;
}
return super.onContextItemSelected(item);
}
}
}
图片: