如图,我们要做得就是这个:

先上代码:

1,逻辑代码

 package com.example.hello;

 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.TextView;

 public class mima extends Activity {
     private static final String KEY_IS_SHOW_PWD_TIP = "KISPT";
     private static SharedPreferences sharedPreferences;
     private View newView;
     private TextView tv;

     private CheckBox cb;

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         // 用于填充AlertDialog的布局<<
         LayoutInflater inflater = LayoutInflater.from(this);
         newView = inflater.inflate(R.layout.dialog_item_add_quesgood, null);
         tv = (TextView) newView.findViewById(R.id.tv_add_quesGood);
         // >>

         cb = (CheckBox) newView.findViewById(R.id.cb_isShow);
         // 一定要做判断
         if (isShowPwdTip()) {
             showDialog(0);
         }
         Button bt =  (Button) findViewById(R.id.bt);
         bt.setOnClickListener(new OnClickListener() {

             @Override
             public void onClick(View v) {
                 // TODO Auto-generated method stub
                 if (isShowPwdTip()) {
                     showDialog(0);
                 }
             }
         });
     }

     @Override
     protected Dialog onCreateDialog(int id) {
         switch (id) {
         case 0: {
             //第二次点击弹出时将父view中存在的上一个子view删除(否则会出现java.lang.IllegalStateException:
             //The specified child already has a parent. You must call removeView() on the child's parent first.)
             ViewGroup vp = (ViewGroup) newView.getParent();
             if(vp != null){
                 vp.removeAllViews();
             }

             return new AlertDialog.Builder(mima.this)
                     .setView(newView)//自定义布局
                     .setOnKeyListener(new DialogInterface.OnKeyListener() {

                         @Override
                         public boolean onKey(DialogInterface dialog,
                                 int keyCode, KeyEvent event) {
                             if (event.getKeyCode() == KeyEvent.KEYCODE_SEARCH) {
                                 return true;
                             }
                             return false;
                         }
                     })
                     .setTitle("实验:")

                     .setPositiveButton("确定",
                             new DialogInterface.OnClickListener() {
                                 @Override
                                 public void onClick(DialogInterface dialog,
                                         int which) {
                                     if (cb.isChecked()) {
                                         removeDialog(0);
                                         closeShowPwdTip();
                                     } else {
                                         removeDialog(0);
                                     }
                                 }
                             })
                     .setNeutralButton("取消",
                             new DialogInterface.OnClickListener() {
                                 @Override
                                 public void onClick(DialogInterface dialog,
                                         int which) {
                                     removeDialog(0);
                                 }
                             }).create();
         }
         default: {
             return null;
         }
         }
     }

     public boolean closeShowPwdTip() {
         if (sharedPreferences == null)
             sharedPreferences = PreferenceManager
                     .getDefaultSharedPreferences(this);
         Editor editor = sharedPreferences.edit();
         editor.putBoolean(KEY_IS_SHOW_PWD_TIP, false);
         return editor.commit();
     }

     public boolean isShowPwdTip() {
         if (sharedPreferences == null)
             sharedPreferences = PreferenceManager
                     .getDefaultSharedPreferences(this);
         return sharedPreferences.getBoolean(KEY_IS_SHOW_PWD_TIP, true);
     }
 }

2,daialog布局布局

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical" >

     <TextView
         android:id="@+id/tv_add_quesGood"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="您好,点击不再提示将不会再次出现此对话框,是否继续?"
         android:layout_marginTop="10dp"
         android:layout_marginLeft="10dp"
         />

     <CheckBox
         android:id="@+id/cb_isShow"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="4dp"
         android:text="不在提示"
         />
 </LinearLayout>

3,主界面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="horizontal"
    tools:context=".MainActivity" >

<Button
    android:id="@+id/bt"
    android:text="点击"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

</LinearLayout>

逻辑代码部分是我参考某大神修改的,因为忘了出处,还请见谅。

整个过程主要就是通过sharedPreferences 存储点击状态,再给Dialog自定义一个布局来完成的,代码可直接用。因为比较简单,就不浪费大家时间了。

android中“下次不再提示”的对话框(修改自某大神)的更多相关文章

  1. 【转】Android中通知的提示音、震动和LED灯效果小例子

    通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...

  2. Android中仿IOS提示框的实现

    前言 在Android开发中,我们有时需要实现类似IOS的对话框.今天我就来总结下,如何通过自定义的开发来实现类似的功能. 自定义Dialog 我们知道Android中最常用的对话框就是Dialog及 ...

  3. Android中,粗暴的方式,修改字体

    序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...

  4. 【转】 Android中退出程序的提示框

    原文网址:http://blog.csdn.net/jumping_android/article/details/7571309 @Override public boolean onKeyDown ...

  5. 使用原生ajax访问后台数据并将其展现在前端页面中(小菜鸟自己整理玩的,大神勿喷)

    首先你要有php的环境,关于php环境的搭建,php本地站点的搭建,此处不再重复请看这里:http://www.cnblogs.com/Gabriel-Wei/p/5950465.html我们把wam ...

  6. Android中的AutoCompleteTextView(随笔提示文本)组件的简单使用

    Android中的随笔提示文本组件AutoCompleteTextView的使用,此组件用于输入文本,然后就会在所配置的适配器中的数据进行查找显示在组件下面. 这里值得注意的是AutoComplete ...

  7. android中使用spinner组件,以key,value的方式

    接着上一篇文章的内容:android中使用spinner组件 稍做修改,以key,value的方式,在实际使用中,经常需要获取的值并不一定跟显示的内容一致. 需要先添加一个对象类,用来描述key,va ...

  8. Android中的AlertDialog使用示例五(自定义对话框)

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...

  9. Android之hint提示字体大小修改,显示完全

    Android之hint提示字体大小修改,显示完全 1.工作中遇到一个问题,就是自定义EditText的hint提示在超大字体下会显示不全, 2.然后在网上搜索了一下,在这里记录一下,分享给大家,在此 ...

随机推荐

  1. JsonHelper developed by using Newtonsoft.Json.NET, Deserialize to &lt;T&gt; object , XmlToJson/JsonToXml, QuoteName by using JToken Path.

    namespace TestConsoleApplication { using System; using System.Diagnostics; using System.Threading; u ...

  2. build/envsetup.sh 生成的命令详解表

    参考: https://wiki.cyanogenmod.org/w/Envsetup_help 它是一个.sh文件,用source后就生成android编译相关函数,具体如下. 速查 Invokin ...

  3. 解决driver.findElement(By)运行到此处报null指针问题

    1.由于自动化页面上的元素定位太多,主要是通过By来定位,而By提供了id,xpath,name差不多就可以定位到元素 可以使用一个配置文件存储页面上的定位By值,然后从配置文件获取by值,行程by方 ...

  4. ASP.NET ZERO 学习 HangFire的使用

    hangfire 是一个分布式后台执行服务. 官网:http://hangfire.io/ 1.启用 hangfire 2.Hangfire可以提供一个面板页面,实时显示所有后台作业的状态,你可以按它 ...

  5. EC笔记,第一部分:2.尽量以const,enum,inline代替#define

    02.尽量以const,enum,inline代替#define 原因:编译前的预处理会替换宏,所以调试的时候找不到错误 1.const 尽量用const替代常量宏定义 两种特殊情况: (1).常量指 ...

  6. ViEmuVS2013-3.2.1 破解

    VS升级到2013后,作为一个Vimer,自然需要更新最新的ViEmu插件,因为现在离了Vim,写代码已经寸步难行了. ViEmu 3.2.1的破解其实和Viemu 3.0.13的破解方法一样.安装前 ...

  7. 李明杰视频 SVN

    李明杰视频 SVN 就10-12使用技术SVN 源代码会引发哪些问题? 无法后悔:做错一个操作 版本备份:费控件,费时间 版本混乱:因版本备份太多造成混乱 代码冲突:多人操作同一文件 强烈建议 使用源 ...

  8. shell script入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  9. PHP两个字符串比较(人为出错),两字符串类型和数据表面相等,但strcmp()结果不为0

    PHP中,比较两个字符串是否相等用:strcmp(): PHP strcmp() 函数 PHP String 函数 定义和用法 strcmp() 函数比较两个字符串. 该函数返回: 0 - 如果两个字 ...

  10. Saltstack 常用的模块及API

    Saltstack提供了非常丰富的功能模块,设计操作系统的基础功能,常用工具支持等, 官网模块介绍 http://docs.saltstack.com/ref/modules/all/index.ht ...