版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
菜单与对话框
4.1任务1-使用选项菜单OptionsMenu21菜单的XML文件2选项菜单的创建方法3选项菜单的事件响应方法OptionsMenuOptionsMenu不依赖于内容,在应用创建视图时,OptionsMenu也被生成,常用于全局场合项目模板创建一个空白活动页面时,默认没有菜单文件夹,在创建OptionsMenu时,可利用向导创建相关文件夹和文件重要方法onCreateOptionsMenu()应用首次生成选项菜单时调用,之后不再被调用,适合生成静态菜单onPrepareOptionsMenu()没次点击选项菜单时被调用,适合生成动态内容的菜单项onOptionsItemSelected()选项菜单的点击事件回调菜单XMLmenu根节点item节点为菜单项android:title菜单项在菜单中所显示的文本android:icon菜单项的图标,须与app:showAsAction配合app:showAsAction属性always:在动作栏以图标形式显示菜单项3相关布局文件4<!--OptionsMenu布局文件res/menu/opt_menu.xml-->
<menuxmlns:app="/apk/res-auto"
xmlns:android="/apk/res/android">
<item
android:id="@+id/opt_add"
android:icon="@drawable/ic_baseline_add_box_24"
android:title="增加"
app:showAsAction="always"/>
<item
android:id="@+id/opt_modify"
android:title="修改"/>
<item
android:id="@+id/opt_delete"
android:title="删除"/>
</menu><vectorandroid:height="24dp"android:tint="#FFFFFF"
android:viewportHeight="24"android:viewportWidth="24"
android:width="24dp"xmlns:android="/apk/res/android">
<pathandroid:fillColor="#FF9800"android:pathData="M19,3L5,3c-1.11,0-2,0.9-2,2v14c0,1.10.89,22,2h14c1.1,02,-0.92,-2L21,5c0,-1.1-0.9,-2-2,-2zM17,13h-4v4h-2v-4L7,13v-2h4L11,7h2v4h4v2z"/>
</vector><!--my_main.xml-->
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="YournameandID"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""/>
</LinearLayout>矢量图文件,右击res/drawable文件夹,new→VectorAsset选项创建实现MainActivity5publicclassMainActivityextendsAppCompatActivity{
TextViewtv;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_main);
tv=findViewById(R.id.tv_result);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
getMenuInflater().inflate(R.menu.opt_menu,menu);
//将res/menu/opt_menu.xml菜单文件填充到menu对象上
//newMenuInflater(getApplicationContext()).inflate(R.menu.opt_menu,menu);
//也可以使用MenuInflater填充菜单
returnsuper.onCreateOptionsMenu(menu);
}
@Override
publicbooleanonOptionsItemSelected(@NonNullMenuItemitem){
Strings="";
//哪个选项菜单项被选中,建议使用菜单项的id进行判断
switch(item.getItemId()){
caseR.id.opt_add:
s="增加";
break;
caseR.id.opt_modify:
s="修改";
break;
caseR.id.opt_delete:
s="删除";
break;
}
tv.setText(s);
returnsuper.onOptionsItemSelected(item);
}
}4.2任务2-使用上下文菜单ContextMenu61注册上下文菜单2上下文菜单的创建和点击响应方法3上下文菜单获取触发位置4适配器数据的更新ContextMenuContextMenu依赖于内容,需要注册才能被使用调用registerForContextMenu()方法对UI对象注册ContextMenu长按被注册的视图,弹出上下文菜单重要方法onCreateContextMenu()每次弹出上下文菜单均会被调用onContextItemSelected(MenuItemitem)菜单项点击事件回调若是针对ListView、GridView等组件,需要知道弹出上下文菜单的位置item.getMenuInfo()方法得到ContextMenuInfo对象无法得到position或者id信息须将ContextMenuInfo对象强制类型转换成AdapterContextMenuInfo对象适配器视图更新方法notifyDataSetChanged()方法一旦数据源的数据发生变化,需要调用适配器更新视图,保持视图与数据的一致性7项目的布局文件8<!--ContextMenu布局文件res/menu/ctx_menu.xml-->
<menuxmlns:app="/apk/res-auto"
xmlns:android="/apk/res/android">
<item
android:id="@+id/ctx_insert"
android:title="插入"/>
<item
android:id="@+id/ctx_delete"
android:title="删除"/>
</menu><!--MainActivity的布局文件my_main.xml-->
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="YournameandID"/>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>实现MainActivity9publicclassMainActivityextendsAppCompatActivity{
ArrayList<String>list=newArrayList<>();
ArrayAdapter<String>adapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_main);
for(inti=0;i<20;i++){
Strings=String.format("Item%02d",i);
list.add(s);
}
adapter=newArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
ListViewlv=findViewById(R.id.listView);
lv.setAdapter(adapter);
registerForContextMenu(lv);
//对ListView视图注册ContextMenu,长按ListView视图会弹出ContextMenu
//若不注册ContextMenu,则不会生成对应菜单
}
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
ContextMenu.ContextMenuInfomenuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
getMenuInflater().inflate(R.menu.ctx_menu,menu);
//将res/menu/ctx_menu.xml菜单生成到菜单对象menu上
}
@Override
publicbooleanonContextItemSelected(@NonNullMenuItemitem){
ContextMenu.ContextMenuInfomenuInfo=item.getMenuInfo();
//通过item获得菜单项对象ContextMenuInfo
AdapterView.AdapterContextMenuInfoadapterContextMenuInfo=
(AdapterView.AdapterContextMenuInfo)menuInfo;
//将ContextMenuInfo对象强制类型转换为AdapterContextMenuInfo
//通过AdapterContextMenuInfo获得位置信息position
intposition=adapterContextMenuInfo.position;
switch(item.getItemId()){
caseR.id.ctx_insert:
Strings=String.format("Random:%d",newRandom().nextInt(1000));
//产生一个区间为[0,1000)的随机整数(不包括1000)
list.add(position,s);//数据源插入数据s至指定位置position
adapter.notifyDataSetChanged();
//数据源发生变化,通知适配器数据更新,适配器全盘更新
break;
caseR.id.ctx_delete:
list.remove(position);//数据源删除指定位置position的数据
adapter.notifyDataSetChanged();//通知适配器更新视图
break;
}
returnsuper.onContextItemSelected(item);
}
}4.3任务3-使用弹出菜单PopupMenu101上下文菜单的局限性2PopupMenu可以实现多视图注册3PopupMenu的使用方法项目的布局文件11<!--TextView的菜单文件res/menu/ctx_tv_menu.xml-->
<menuxmlns:app="/apk/res-auto"
xmlns:android="/apk/res/android">
<item
android:id="@+id/ctx_tv_12"
android:title="12sp"/>
<item
android:id="@+id/ctx_tv_16"
android:title="16sp"/>
</menu><!--ContextMenu布局文件res/menu/ctx_menu.xml-->
<menuxmlns:app="/apk/res-auto"
xmlns:android="/apk/res/android">
<item
android:id="@+id/ctx_insert"
android:title="插入"/>
<item
android:id="@+id/ctx_delete"
android:title="删除"/>
</menu><!--MainActivity的布局文件my_main.xml-->
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="YournameandID"/>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>基于上下文菜单的双视图注册12publicclassMainActivityextendsAppCompatActivity{
ArrayList<String>list=newArrayList<>();
ArrayAdapter<String>adapter;
ListViewlv;
TextViewtv;
intctx_position=0;//设置ContextMenu触发位置的变量为全局变量
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_main);
for(inti=0;i<20;i++){
Strings=String.format("Item%02d",i);
list.add(s);
}
adapter=newArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
lv=findViewById(R.id.listView);
lv.setAdapter(adapter);
registerForContextMenu(lv);//对ListView视图注册ContextMenu
tv=findViewById(R.id.tv_result);
registerForContextMenu(tv);//对TextView视图注册ContextMenu
}
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
ContextMenu.ContextMenuInfomenuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
if(v==lv){
//若是ListView,生成对应菜单,并获得位置信息赋给ctx_position
getMenuInflater().inflate(R.menu.ctx_menu,menu);
AdapterView.AdapterContextMenuInfoadapterContextMenuInfo=
(AdapterView.AdapterContextMenuInfo)menuInfo;
ctx_position=adapterContextMenuInfo.position;
}elseif(v==tv){
//若是TextView,生成另一种菜单
getMenuInflater().inflate(R.menu.ctx_tv_menu,menu);
}
}
@Override
publicbooleanonContextItemSelected(@NonNullMenuItemitem){
//TextView触发的ContextMenu对象对应的menuInfo是null,无position属性
intposition=ctx_position;
//ctx_position在onCreateContextMenu()方法中被赋值
switch(item.getItemId()){
caseR.id.ctx_insert:
Strings=String.format("Random:%d",newRandom().nextInt(1000));
list.add(position,s);
adapter.notifyDataSetChanged();
break;
caseR.id.ctx_delete:
list.remove(position);
adapter.notifyDataSetChanged();
caseR.id.ctx_tv_12:
tv.setTextSize(12.0f);//设置文本字体大小
break;
caseR.id.ctx_tv_16:
tv.setTextSize(16.0f);
break;
}
returnsuper.onContextItemSelected(item);
}
}PopupMenu使用要点PopupMenu的构造方法publicPopupMenu(android.content.Contextcontext,android.view.Viewanchor)context为上下文,可通过传递Activity对象或者直接通过getApplicationContext()方法获得anchor为PopupMenu所依赖的视图,即可理解为PopupMenu所需要注册的视图构造出PopupMenu的对象popupMenu,使用popupMenu实现菜单填充和事件处理菜单填充popupMenu.getMenuInflater()方法得到菜单填充器,进而通过菜单填充器的inflate()方法填充菜单popupMenu.getMenu()方法获得Menu对象需要调用show()方法进行显示事件处理PopupMenu对象调用setOnMenuItemClickListener()方法设置侦听器onMenuItemClick()回调方法中进行处理PopupMenu可以对不同视图分别注册,得到不同的PopupMenu对象,并分别对之进行菜单填充和事件侦听处理,提高代码解耦性13基于PopupMenu的实现14publicclassMainActivityextendsAppCompatActivity{
ArrayList<String>list=newArrayList<>();
ArrayAdapter<String>adapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_main);
for(inti=0;i<20;i++){
Strings=String.format("Item%02d",i);
list.add(s);
}
adapter=newArrayAdapter<>(this,
android.R.layout.simple_list_item_1,list);
ListViewlv=findViewById(R.id.listView);
lv.setAdapter(adapter);
registerForContextMenu(lv);//对ListView视图注册ContextMenu
TextViewtv=findViewById(R.id.tv_result);
tv.setOnLongClickListener(newView.OnLongClickListener(){
//利用对象tv长按弹出PopupMenu
@Override
publicbooleanonLongClick(Viewv){
showTextViewPopUpMenu(tv);//自定义方法,显示PopupMenu
returntrue;//true表示长按事件不再往下传,false则继续往下传递事件
}
});
}
privatevoidshowTextViewPopUpMenu(TextViewv){
PopupMenupopupMenu=newPopupMenu(getApplicationContext(),v);
//对视图v生成菜单对象popupMenu
popupMenu.getMenuInflater()
.inflate(R.menu.ctx_tv_menu,popupMenu.getMenu());
//利用菜单对象popupMenu的getMenuInflater()方法获得对应菜单填充器
//利用菜单对象popupMenu的getMenu()方法获得Menu对象menu
popupMenu.setOnMenuItemClickListener(
newPopupMenu.OnMenuItemClickListener(){
//对popupMenu设置菜单项点击侦听
@Override
publicbooleanonMenuItemClick(MenuItemitem){
switch(item.getItemId()){
caseR.id.ctx_tv_12:
v.setTextSize(12.0f);
break;
caseR.id.ctx_tv_16:
v.setTextSize(16.0f);
break;
}
returntrue;//true表示菜单项选中事件不再往下传,false则继续下传
}
});
popupMenu.show();//调用show()方法显示PopupMenu
}
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
ContextMenu.ContextMenuInfomenuInfo){
…
}
@Override
publicbooleanonContextItemSelected(@NonNullMenuItemitem){
…
}
}4.4任务4-使用对话框AlertDialog151消息对话框2列表对话框3单选对话框对话框AlertDialog的使用要点AlertDialog使用AlertDialog.Builder()方法创建1个Builder对象setTitle()方法设置对话框标题setMessage()方法设置对话框的文本内容setItems()方法设置列表数据和点击侦听setSingleChoiceItems()方法设置单选数据、默认选中位置和点击侦听setView()方法设置自定义视图,此时建议使用LayoutInflater从布局文件中生成视图对象setMultiChoiceItems()方法设置多选内容、多选默认选中的数据和相关侦听事件setAdapter()方法设置适配器setCursor()方法设置Cursor数据,Cursor为数据库查询返回的游标setIcon()方法设置图标show()方法显示对话框对话框的按钮设置方法setPositiveButton()方法设置确定按钮setNegativeButton()方法设置取消按钮setNeutralButton()方法设置中间按钮第1个参数是按钮所显示的文本第2个参数是对应的点击事件接口,若不需要处理点击事件,可传入null16项目的布局文件my_main.xml17<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="YournameandID"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""/>
<Button
android:id="@+id/bt1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="消息对话框"/>
<Button
android:id="@+id/bt2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="列表对话框"/>
<Button
android:id="@+id/bt3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="单选对话框"/>
</LinearLayout>实现MainActivity18publicclassMainActivityextendsAppCompatActivity{
TextViewtv;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_main);
tv=findViewById(R.id.tv_result);
String[]hobbies=newString[]{"游泳","跑步","篮球"};
findViewById(R.id.bt1).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
showMessageDialog("这是一个消息提示框");
}
});
findViewById(R.id.bt2).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
showItemsDialog(hobbies);
}
});
findViewById(R.id.bt3).setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
showSingleChoiceDialog(hobbies);
}
});
}
privatevoidshowMessageDialog(Strings){
AlertDialog.Builderbl=newAlertDialog.Builder(this);
bl.setTitle("消息提示框").setMessage(s);
bl.setNegativeButton("退出",null);//退出按钮,null代表不对事件响应做处理
bl.show();
}
privatevoidshowItemsDialog(String[]hobbies){
AlertDialog.Builderbl=newAlertDialog.Builder(this);
bl.setTitle("列表框").setItems(hobbies,
newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//每次点击列表项均会更新TextView
Stringhobby=hobbies[which];
//若要在PositiveButton点击事件中获得hobby
//不借助全局变量或者自定义类,难以实现
tv.setText(hobby);
}
});
bl.setNegativeButton("退出",null);
bl.show();
}实现MainActivity(续)19
privatevoidshowSingleChoiceDialog(String[]hobbies){
//finalintchoiceIndex=0;//无法实现,final变量不能被二次赋值
//finalIntegerchoiceIndex=newInteger(0);
//无法实现,Integer类没有setter相关方法
finalMyIntegermyInteger=newMyInteger(0);
//不加final无法在匿名回调方法中被访问
//通过自定义类解决int类型的final变量不能二次赋值问题
//myInteger不能重新指向new对象,但可以调用类方法对类成员改值
AlertDialog.Builderbl=newAlertDialog.Builder(this);
bl.setTitle("单选对话框");
bl.setSingleChoiceItems(hobbies,myInteger.getPosition(),
newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//showMessageDialog("inside");//测试对话框中是否能生成另一个对话框
myInteger.setPosition(which);
//通过setPosition()方法给类成员变量重新赋值
}
});
bl.setPositiveButton("确定",newDialogInterface.OnClickListener(){
//点击确定按钮,在回调中处理确定按钮对应的逻辑,更新爱好选项到TextView
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//从自定义类对象myInteger中取选中索引值
intposition=myInteger.getPosition();
tv.setText(hobbies[position]);
}
});
bl.setNegativeButton("退出",null);
bl.show();
}
classMyInteger{
//定义一个内部类解决final问题
//类对象变成final,不能重新指向对象,但是可以调用类的相
//关方法改变类成员变量的值
privateintposition=0;
publicMyInteger(intposition){
this.position=position;
}
publicintgetPosition(){
returnposition;
}
publicvoidsetPosition(intposition){
this.position=position;
}
}
}通过自定义类实现final变量的赋值问题4.5任务5-使用自定义视图对话框201自定义视图的使用方法2利用自定义接口提高代码的解耦性3使用对话框新增修改数据项目的布局文件21<!--MainActivity的布局文件my_main.xml-->
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="YournameandID"/>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout><!--ContextMenu菜单文件res/menu/ctx_menu.xml-->
<menuxmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto">
<item
android:id="@+id/ctx_add"
android:title="新增"/>
<item
android:id="@+id/ctx_edit"
android:title="修改"/>
</menu><!--AlertDialog自定义视图res/layout/dialog_view.xml-->
<LinearLayoutxmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/dialog_et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Inputyourname"
android:text=""/>
<EditText
android:id="@+id/dialog_et_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Inputyourphonenumber"
android:text=""/>
</LinearLayout>数据封装类PhoneData22publicclassPhoneData{
privateStringname;
privateStringphone;
publicPhoneData(Stringname,Stringphone){
this.name=name;
this.phone=phone;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetPhone(){
returnphone;
}
publicvoidsetPhone(Stringphone){
this.phone=phone;
}
@Override
publicStringtoString(){
//必须改写toString()方法,否则无法将PhoneData字符串化显示在适配器中
returnString.format("%s%s",name,phone);
}
}未改写toString(),ArrayAdapter显示效果实现自定义视图对话框PhoneDataDialog23publicclassPhoneDataDialog{
privateContextcontext;//LayoutInflater需要Context参数
privateStringtitle;//对话框标题
publicinterfaceOnSubmitListener{//自定义一个接口
voidonSubmit(PhoneDataupdatedData);
//通过用户实现接口的onSubmit()方法对updatedData进行处理
//使用updatedData修改数据或者新增数据完全取决于用户实现的代码
//接口回调在对话框的确定按钮中触发
}
publicPhoneDataDialog(Contextcontext,Stringtitle){
this.context=context;
this.title=title;
}
publicvoidshowDialog(PhoneDatadata,OnSubmitListenerl){
/***
data数据是用户传进来的待修改数据,若是新增数据,可传null
OnSubmitListener是用户实现的接口,在确定按钮中触发回调,
通过onSubmit(PhoneDataupdatedData)传出修改后的数据updatedData
用户则在调用showDialog()时实现回调方法,对updatedData处理(新增或者修改)
*/
PhoneDatatemp=newPhoneData("","");
if(data!=null){//若data不为空,则将值赋给变量temp
temp.setName(data.getName());
temp.setPhone(data.getPhone());
}
Viewv=LayoutInflater.from(context)
.inflate(R.layout.dialog_view,null,false);
//将布局文件填充为视图对象v
EditTextet_name=v.findViewById(R.id.dialog_et_name);
EditTextet_phone=v.findViewById(R.id.dialog_et_phone);
//对两个EditText赋data传进的初值
et_name.setText(temp.getName());
et_phone.setText(temp.getPhone());
AlertDialog.Builderbl=newAlertDialog.Builder(context);
bl.setTitle(title);
bl.setView(v);//将XML布局填充的视图对象v设置为对话框的内容
bl.setNegativeButton("取消",null);
bl.setPositiveButton("确定",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
PhoneDataupdatedData=newPhoneData(
et_name.getText().toString(),
et_phone.getText().toString());
//不直接修改变量data
//使用updatedData的目的是data可能是null
if(l!=null){//判断接口非空才能设置自定义接口回调
l.onSubmit(updatedData);
}
}
});
bl.show();
}
}实现MainActivity24publicclassMainActivityextendsAppCompatActivity{
ArrayList<PhoneData>list=newArrayList<>();
ArrayAdapter<PhoneData>adapter;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_main);
ListViewlv=findViewById(R.id.listView);
for(inti=0;i<4;i++){//模拟了8个PhoneData数据
list.add(newPhoneData("张三",));
list.add(newPhoneData("李四",));
}
adapter=newArrayAdapter<>(this,
android.R.layout.simple_list_item_1,list);
lv.setAdapter(adapter);
registerForContextMenu(lv);
}
@Override
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
ContextMenu.ContextMenuInfomenuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
getMenuInflater().inflate(R.menu.ctx_menu,menu);//生成ContextMenu
}
@Override
publicbooleanonContextItemSelected(@NonNullMenuItemitem){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度年福建省高校教师资格证之高等教育心理学考试题库
- 2024年度山西省高校教师资格证之高等教育法规高分通关题型题库附解析答案
- 第七章 膳食营养指导与疾病预防课件
- 二年级数学(上)计算题专项练习汇编
- 保密工作培训心得体会
- 2020届中考科学(杭州版)复习同步练习题:第三篇-主题3-第六单元-电流热效应和电功率的测量
- 购买保险欺骗退还本金指导案例
- 高级室内装饰设计人员理论知识试题求答案(5篇模版)
- 2024年专业石材安装服务协议模板
- 2024年度德邦速运协议条款明细
- 期中测评试卷(1-4单元)(试题)-2024-2025学年人教版三年级数学上册
- GB/T 15822.1-2024无损检测磁粉检测第1部分:总则
- 新质生产力解读课件
- 学生对教师评价表(共8页)
- 批发零售大个体 E204-3批发和零售业产业活动单位(个体经营户)商品销售和库存
- 异辛酸钠合成工艺及建设项目
- 西电计组课程设计报告
- 汽车买卖合同工商示范文本
- SC镀锌钢管紧定式连接施工工法(共12页)
- 梅克尔憩室PPT参考幻灯片
- 动车组火灾检测(报警)系统
评论
0/150
提交评论