Android使用AlertDialog實現(xiàn)彈出菜單的詳細過程
前言
最近又開始搗鼓APP,許多api , class都忘記怎么用了,樓下使用AlertDialog實現(xiàn)個彈出菜單,結(jié)果直接crash,查了半天,終于即將,記錄一下……
1 實現(xiàn)代碼
AlertDialog.Builder mBuilder = new AlertDialog.Builder(mContext);//will be crash: android.content.res.Resources$NotFoundException: Resource ID #0x0
mBuilder = new AlertDialog.Builder(this);
//填充列表數(shù)據(jù)
final String[] items = new String[]{"選項1", "選項2", "選項3"};
mBuilder.setTitle("選擇一項"); // 設(shè)置標題
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) {
// 創(chuàng)建并顯示對話框
mBuilder.create().show();//界面上mBtnApp6按鈕點擊后執(zhí)行dialog顯示
}
});
2 實現(xiàn)效果

3 增加數(shù)據(jù)項的效果

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經(jīng)常會用到AlertDialog,把內(nèi)容使用AlertDialog結(jié)合列表的形式顯示出來,然后我們點擊得到點擊的信息。 這里可以使用兩層的AlertDialog來實現(xiàn)
1:我們現(xiàn)在xml文件中定義一個要顯示內(nèi)容列表數(shù)組
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文件內(nèi)容:
<?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>總結(jié)
到此這篇關(guān)于Android使用AlertDialog實現(xiàn)彈出菜單的文章就介紹到這了,更多相關(guān)Android AlertDialog實現(xiàn)彈出菜單內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開發(fā)中PopupWindow用法實例分析
這篇文章主要介紹了Android開發(fā)中PopupWindow用法,結(jié)合實例形式分析了PopupWindow彈出窗口效果的使用技巧,需要的朋友可以參考下2016-02-02
教你五分鐘實現(xiàn)Android超漂亮的刻度輪播控件實例教程
說到輪播圖,想必大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何利用五分鐘快速實現(xiàn)一款超漂亮的Android刻度輪播控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧2018-09-09
Android的Launcher啟動器中添加快捷方式及小部件實例
這篇文章主要介紹了在Android的Launcher啟動器中添加快捷方式及窗口小部件的方法,包括在自己的應用程序中添加窗口小部件AppWidget的例子,需要的朋友可以參考下2016-02-02
android開發(fā)框架afinal使用方法小結(jié)
這篇文章主要為大家詳細總結(jié)了android開發(fā)框架afinal使用方法,注解功能、文件上傳下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11

