当前位置: 首页 > 知识库问答 >
问题:

实现单例模式的Android模式对话框

鲍俊杰
2023-03-14

_________________________________________________________________________________

⁃   public class CustomDialogMsgOneBtn
⁃   {
⁃   
⁃      private static CustomDialogMsgOneBtn _instance;
⁃   
⁃      private UIHandler uiHandler;
⁃      public Context _context;
⁃      public Dialog _dialog;
⁃      private Object synchObject = new Object();
⁃   
⁃      private TextView _tvDialogTitle;
⁃      private TextView _tvDialogMessage;
⁃      private String _dialogTitle;
⁃      private String _dialogMessage;
⁃      private Button _btnDialogOk;
⁃      private String _btnTextOk;
⁃   
⁃      private CustomDialogMsgOneBtn()
⁃      {
⁃   
⁃      }
⁃      public static CustomDialogMsgOneBtn getInstance()
⁃      {
⁃         if( _instance == null )
⁃         {
⁃            _instance = new CustomDialogMsgOneBtn();
⁃         }
⁃         return _instance;
⁃      }
⁃   
⁃      public void setTitleAndMessage( String title, String msg )
⁃      {
⁃         this._dialogTitle = title;
⁃         this._dialogMessage = msg;
⁃      }
⁃   
⁃      public void initDialog( Context c )
⁃      {
⁃         _context = c;
⁃      }
⁃   
⁃      public void setButtonTextOk( String sText )
⁃      {
⁃         this._btnTextOk = sText;
⁃      }
⁃   
⁃      private void constructUiThread()
⁃      {
⁃         HandlerThread uiThread = new HandlerThread( "UIHandler" );
⁃         uiThread.start();
⁃         uiHandler = new UIHandler( uiThread.getLooper() );
⁃      }
⁃   
⁃      public void show()
⁃      {
⁃         try
⁃         {
⁃            constructUiThread();
⁃   
⁃            uiHandler.sendEmptyMessage( 0 );
⁃   
⁃            synchronized( synchObject )
⁃            {
⁃               try
⁃               {
⁃                  synchObject.wait();
⁃               }
⁃               catch( InterruptedException e )
⁃               {
⁃                  e.printStackTrace();
⁃               }
⁃            }
⁃   
⁃         }
⁃         catch( Exception e )
⁃         {
⁃            e.printStackTrace();
⁃         }
⁃   
⁃      }
⁃   
⁃      public void dismissDialog()
⁃      {
⁃         _dialog.dismiss();
⁃      }
⁃   
⁃      private final class UIHandler extends Handler
⁃      {
⁃   
⁃         public View.OnClickListener btnListener = new View.OnClickListener()
⁃         {
⁃   
⁃            @Override
⁃            public void onClick( View v )
⁃            {
⁃   
⁃               int id = v.getId();
⁃               if( id == R.id.btnDialogOk )
⁃               {
⁃                  Log.d( "dialog Ok", "Ok" );
⁃   
⁃                  notifySync();
⁃               }
⁃   
⁃            }
⁃         };
⁃   
⁃         public DialogInterface.OnDismissListener dialogOnDismissListener = new DialogInterface.OnDismissListener()
⁃         {
⁃   
⁃            @Override
⁃            public void onDismiss( DialogInterface dialog )
⁃            {
⁃   
⁃               notifySync();
⁃               Log.d( "dialog being dismissed", "dismiss ang dialog" );
⁃            }
⁃         };
⁃   
⁃         public UIHandler( Looper looper )
⁃         {
⁃            super( looper );
⁃         }
⁃   
⁃         @Override
⁃         public void handleMessage( Message msg )
⁃         {
⁃            _dialog = new Dialog( _context );
⁃            _dialog.requestWindowFeature( Window.FEATURE_NO_TITLE );
⁃            _dialog.setCanceledOnTouchOutside( true );
⁃            _dialog.setContentView( R.layout.dialog_message_one_button );
⁃            _dialog.setOnDismissListener( dialogOnDismissListener );
⁃   
⁃            _tvDialogTitle = (TextView)_dialog.findViewById( R.id.txtDialogTitle );
⁃            _tvDialogMessage = (TextView)_dialog.findViewById( R.id.txtDialogMsg );
⁃            _btnDialogOk = (Button)_dialog.findViewById( R.id.btnDialogOk );
⁃   
⁃            _tvDialogTitle.setText( _dialogTitle );
⁃            _tvDialogMessage.setText( _dialogMessage );
⁃            _btnDialogOk.setText( _btnTextOk );
⁃   
⁃            _btnDialogOk.setOnClickListener( btnListener );
⁃   
⁃            _dialog.show();
⁃   
⁃         }
⁃   
⁃         private void notifySync()
⁃         {
⁃            synchronized( synchObject )
⁃            {
⁃               _dialog.dismiss();
⁃               synchObject.notifyAll();
⁃            }
⁃         }
⁃   
⁃      }// end UIHanlder class
⁃   
⁃   } //end Class
CustomDialogMsgTwoBtn.getInstance().initDialog(this);
CustomDialogMsgTwoBtn.getInstance().setLeftAndRightButtonText( "cancel", "accept" );
CustomDialogMsgTwoBtn.getInstance().setTitleAndMessage( "Custom Dialog", "test msg" );
CustomDialogMsgTwoBtn.getInstance().show();

共有1个答案

鲁峰
2023-03-14

不要那样做!一旦你停止了UI线程,Android系统就会向用户显示一个对话框来尝试关闭!!

使用托管对话框,而不是http://developer.android.com/guide/topics/ui/dialogs.html

 类似资料:
  • 本文向大家介绍c# 单例模式的实现,包括了c# 单例模式的实现的使用技巧和注意事项,需要的朋友参考一下   记一下学习单例模式的笔记:   单例就是要保证该类仅有一个实例。实现完全封闭的单例(外部不能new)其实就要两点要求: 全局访问:需要一个该类型的全局静态变量,每次获取实例时都要判断它是否null,不存在new,存在通过一个方法直接返回该值获取实例来保证对象唯一; 实例化控制:new实例不能

  • 本文向大家介绍c#设计模式之单例模式的实现方式,包括了c#设计模式之单例模式的实现方式的使用技巧和注意事项,需要的朋友参考一下 场景描述 单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源 单例模式无论是在实际开发中还是在软件应用中比较常见,比如,windows系统的任务管理器、IIS的HttpAppl

  • 本文向大家介绍Android 单例模式 Singleton 简单实例设计模式解析,包括了Android 单例模式 Singleton 简单实例设计模式解析的使用技巧和注意事项,需要的朋友参考一下 单例模式 Singleton 简单实例设计模式解析 前言 今天我来全面总结一下Android开发中最常用的设计模式 - 单例模式。 关于设计模式的介绍,可以看下我之前写的:1分钟全面了解“设计模式” 目录

  • 我正在浏览单个实例的文档,并尝试了几个示例。在我的一个示例中,我有三个活动:A- 场景: 通过A和B导航到C后(即A- 问题 当从活动A按下后退按钮时,为什么活动B出现在前台? 其他场景: 类似地,从活动C如果用户按下设备主页按钮,并回来的应用程序长按主页,C停留在前台。但是后退按钮按流程需要C-

  • 原始问题:程序读取旧配置文件(.ini)的输入 小节:漂移 田块:亩 价值:5

  • 本文向大家介绍BootStrap+Angularjs+NgDialog实现模式对话框,包括了BootStrap+Angularjs+NgDialog实现模式对话框的使用技巧和注意事项,需要的朋友参考一下 本篇文章主要介绍了"angularjs+bootstrap+ngDialog实现模式对话框",对于Javascript教程感兴趣的同学可以参考一下: 在完成一个后台管理系统时,需要用表显示注册用户