当前位置: 代码网 > it编程>App开发>Android > Android使用AlertDialog实现弹出菜单的详细过程

Android使用AlertDialog实现弹出菜单的详细过程

2024年05月28日 Android 我要评论
前言最近又开始捣鼓app,许多api , class都忘记怎么用了,楼下使用alertdialog实现个弹出菜单,结果直接crash,查了半天,终于即将,记录一下……1 实

前言

最近又开始捣鼓app,许多api , class都忘记怎么用了,楼下使用alertdialog实现个弹出菜单,结果直接crash,查了半天,终于即将,记录一下……

1 实现代码

  alertdialog.builder mbuilder = new alertdialog.builder(mcontext);//will be crash: android.content.res.resources$notfoundexception: resource id #0x0
        mbuilder = new alertdialog.builder(this);
        //填充列表数据
        final string[] items = new string[]{"选项1", "选项2", "选项3"};
        mbuilder.settitle("选择一项"); // 设置标题
        mbuilder.setitems(items, new dialoginterface.onclicklistener() {
            @override
            public void onclick(dialoginterface dialog, int which) {
                toast.maketext(mcontext, "clicked:"+ items[which], toast.length_short).show();
            }
        });

        mbtnapp6.setonclicklistener(new view.onclicklistener() {
            @override
            public void onclick(view v) {
               // 创建并显示对话框
                mbuilder.create().show();//界面上mbtnapp6按钮点击后执行dialog显示

            }

        });

2 实现效果

3 增加数据项的效果

4 遇到的错误

  • android.content.res.resources$notfoundexception: resource id #0x0
  • 原因:new alertdialog.builder(mcontext) , crash
  •      或 new alertdialog.builder(getapplicationcontext()) , crash
    
  • 解决办法:new alertdialog.builder(this), ok
--------- beginning of crash
04-18 17:08:40.940  6011  6011 e androidruntime: fatal exception: main
04-18 17:08:40.940  6011  6011 e androidruntime: process: com.cictech.xlauncher, pid: 6011
04-18 17:08:40.940  6011  6011 e androidruntime: android.content.res.resources$notfoundexception: resource id #0x0
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.content.res.resourcesimpl.getvalue(resourcesimpl.java:237)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.content.res.resources.loadxmlresourceparser(resources.java:2400)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.content.res.resources.getlayout(resources.java:1252)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.layoutinflater.inflate(layoutinflater.java:530)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.layoutinflater.inflate(layoutinflater.java:479)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.appcompat.app.alertcontroller$alertparams.createlistview(alertcontroller.java:989)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.appcompat.app.alertcontroller$alertparams.apply(alertcontroller.java:965)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.appcompat.app.alertdialog$builder.create(alertdialog.java:984)
04-18 17:08:40.940  6011  6011 e androidruntime:        at com.cictech.xlauncher.mainactivity$7.onclick(mainactivity.java:188)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.view.performclick(view.java:7448)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.view.performclickinternal(view.java:7425)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.view.onkeyup(view.java:15060)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.keyevent.dispatch(keyevent.java:2892)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.view.dispatchkeyevent(view.java:14247)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1954)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1959)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1959)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1959)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1959)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1959)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewgroup.dispatchkeyevent(viewgroup.java:1959)
04-18 17:08:40.940  6011  6011 e androidruntime:        at com.android.internal.policy.decorview.superdispatchkeyevent(decorview.java:476)
04-18 17:08:40.940  6011  6011 e androidruntime:        at com.android.internal.policy.phonewindow.superdispatchkeyevent(phonewindow.java:1861)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.app.activity.dispatchkeyevent(activity.java:4085)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.core.app.componentactivity.superdispatchkeyevent(componentactivity.java:126)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.core.view.keyeventdispatcher.dispatchkeyevent(keyeventdispatcher.java:86)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.core.app.componentactivity.dispatchkeyevent(componentactivity.java:144)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.appcompat.app.appcompatactivity.dispatchkeyevent(appcompatactivity.java:604)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.appcompat.view.windowcallbackwrapper.dispatchkeyevent(windowcallbackwrapper.java:60)
04-18 17:08:40.940  6011  6011 e androidruntime:        at androidx.appcompat.app.appcompatdelegateimpl$appcompatwindowcallback.dispatchkeyevent(appcompatdelegateimpl.java:3413)
04-18 17:08:40.940  6011  6011 e androidruntime:        at com.android.internal.policy.decorview.dispatchkeyevent(decorview.java:390)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$viewpostimeinputstage.processkeyevent(viewrootimpl.java:5977)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$viewpostimeinputstage.onprocess(viewrootimpl.java:5845)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.deliver(viewrootimpl.java:5340)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.ondelivertonext(viewrootimpl.java:5397)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.forward(viewrootimpl.java:5363)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$asyncinputstage.forward(viewrootimpl.java:5515)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.apply(viewrootimpl.java:5371)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$asyncinputstage.apply(viewrootimpl.java:5572)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.deliver(viewrootimpl.java:5344)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.ondelivertonext(viewrootimpl.java:5397)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.forward(viewrootimpl.java:5363)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.apply(viewrootimpl.java:5371)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.deliver(viewrootimpl.java:5344)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.ondelivertonext(viewrootimpl.java:5397)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$inputstage.forward(viewrootimpl.java:5363)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$asyncinputstage.forward(viewrootimpl.java:5548)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.viewrootimpl$imeinputstage.onfinishedinputevent(viewrootimpl.java:5706)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.inputmethod.inputmethodmanager$pendingevent.run(inputmethodmanager.java:3179)
04-18 17:08:40.940  6011  6011 e androidruntime:        at android.view.inputmethod.inputmethodmanager.invokefinishedinputeventcallback(inputmethodmanager.java:2721)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.view.inputmethod.inputmethodmanager.finishedinputevent(inputmethodmanager.java:2712)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.view.inputmethod.inputmethodmanager$imeinputeventsender.oninputeventfinished(inputmethodmanager.java:3156)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.view.inputeventsender.dispatchinputeventfinished(inputeventsender.java:143)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.os.messagequeue.nativepollonce(native method)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.os.messagequeue.next(messagequeue.java:335)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.os.looper.loop(looper.java:183)
04-18 17:08:40.943  6011  6011 e androidruntime:        at android.app.activitythread.main(activitythread.java:7695)
04-18 17:08:40.943  6011  6011 e androidruntime:        at java.lang.reflect.method.invoke(native method)
04-18 17:08:40.943  6011  6011 e androidruntime:        at com.android.internal.os.runtimeinit$methodandargscaller.run(runtimeinit.java:592)
04-18 17:08:40.943  6011  6011 e androidruntime:        at com.android.internal.os.zygoteinit.main(zygoteinit.java:1099)
04-18 17:08:40.947  2569  2813 d audioflinger: mixer(0xabae2080) throttle end: throttle time(45)
04-18 17:08:40.964  2774  3534 w activitytaskmanager:   force finishing activity com.cictech.xlauncher/.mainactivity

附:android中用两层alertdialog来进行弹出选择框信息选择

在android经常会用到alertdialog,把内容使用alertdialog结合列表的形式显示出来,然后我们点击得到点击的信息。 这里可以使用两层的alertdialog来实现

1:我们现在xml文件中定义一个要显示内容列表数组

2:在activity中使用 string[] items = getresources().getstringarray(r.array.item);

3:增添点击事件,使用alertdialog.builder  千万不能忘了最后进行show()哦  

直接看截图的效果:

源代码:      

package com.jiangqq.alertdialog;
 
import android.app.activity;
import android.app.alertdialog;
import android.content.dialoginterface;
import android.os.bundle;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
 
/**
 * 使用alertdialog进行选择功能
 * 
 * @author jiangqq
 * 
 */
public class alertdialogactivity extends activity {
	private button btn;
 
	@override
	public void oncreate(bundle savedinstancestate) {
		super.oncreate(savedinstancestate);
		setcontentview(r.layout.main);
 
		btn = (button) findviewbyid(r.id.btn);
		btn.setonclicklistener(new onclicklistener() {
 
			public void onclick(view v) {
				final string[] items = getresources().getstringarray(
						r.array.item);
				new alertdialog.builder(alertdialogactivity.this)
						.settitle("请点击选择")
						.setitems(items, new dialoginterface.onclicklistener() {
 
							public void onclick(dialoginterface dialog,
									int which) {
								new alertdialog.builder(
										alertdialogactivity.this)
										.settitle("你选择了:" + items[which])
										.setmessage("点击选择操作")
										.setpositivebutton(
												"确定",
												new dialoginterface.onclicklistener() {
 
													public void onclick(
															dialoginterface dialog,
															int which) {
														// 这里是你点击确定之后可以进行的操作
													}
												})
										.setnegativebutton(
												"取消",
												new dialoginterface.onclicklistener() {
 
													public void onclick(
															dialoginterface dialog,
															int which) {
														// 这里点击取消之后可以进行的操作
													}
												}).show();
							}
						}).show();
			}
		});
	}
}

 string.xml文件内容:    

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <string name="hello">hello world, alertdialogactivity!</string>
    <string name="app_name">hello world, alertdialogactivity</string>
    <string name="btn_name">点击弹出alertdialog</string>
 
    <string-array name="item">
        <item>第一个选择</item>
        <item>第二个选择</item>
        <item>第三个选择</item>
        <item>第四个选择</item>
    </string-array>
 
</resources>

总结 

到此这篇关于android使用alertdialog实现弹出菜单的文章就介绍到这了,更多相关android alertdialog实现弹出菜单内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com