zoukankan      html  css  js  c++  java
  • Android 自定义Dialog类,并在Activity中实现按钮监听。

    实际开发中,经常会用到Dialog,比如退出时候会弹出是否退出,或者还有一些编辑框也会用Dialog实现,效果图如下:

    开发中遇到的问题无非在于如果在Activity中监听这个Dialog中实现的按钮,Dialog类如下,在MyDialog这个类中实现了一个LeaveMyDialogListener接口,用来实现onclick的点击事件:

    package com.Ieasy.Tool;
    import com.Ieasy.ieasyware.R;
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    public class MyDialog extends Dialog implements android.view.View.OnClickListener {
    
        private Context context;
        private TextView txt;
        private Button   btnok,btnedit,btncancle,btnsave;
        private LeaveMyDialogListener listener;
        
        public interface LeaveMyDialogListener{   
            public void onClick(View view);   
        }   
        
        public MyDialog(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
            this.context = context;
        }
        
        public MyDialog(Context context,int theme,LeaveMyDialogListener listener) {
            super(context,theme);
            // TODO Auto-generated constructor stub
            this.context = context;
            this.listener = listener;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            this.setContentView(com.Ieasy.ieasyware.R.layout.mydialog);
            btncancle = (Button)findViewById(R.id.mycancle);
            btnedit   = (Button)findViewById(R.id.myedit);
            btnok     = (Button)findViewById(R.id.myok);
            txt       = (TextView)findViewById(R.id.miaosu);
            btnsave   = (Button)findViewById(R.id.mysave);
            btncancle.setOnClickListener(this);
            btnedit.setOnClickListener(this);
            btnok.setOnClickListener(this);
            btnsave.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            listener.onClick(v);
        }
    }

    布局文件如下:

    <?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" >
    
        <LinearLayout
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:background="@drawable/night_biz_subscribe_media_recommend_item_bg"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/miaosu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="20dp"
                android:text="描述"
                android:textColor="@color/whitesmoke"
                android:textSize="20sp" />
    
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="50dp"
                android:orientation="horizontal" >
    
                <Button
                    android:id="@+id/myok"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/btnclick"
                    android:textColor="@color/whitesmoke"
                    android:text="确定" />
    
                <Button
                    android:id="@+id/myedit"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/btnclick"
                    android:textColor="@color/whitesmoke"
                    android:text="编辑" />
                
                <Button
                    android:id="@+id/mysave"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/btnclick"
                    android:textColor="@color/whitesmoke"
                    android:text="保存" />
    
                <Button
                    android:id="@+id/mycancle"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/btnclick"
                    android:textColor="@color/whitesmoke"
                    android:text="取消" />
                
            </LinearLayout>
        </LinearLayout>
    
    </LinearLayout>

    引用的style:

    <style name="MyDialog" parent="@android:Theme.Dialog">
            <item name="android:windowFrame">@null</item>
            <item name="android:windowNoTitle">true</item> 
            <item name="android:windowBackground">@drawable/night_biz_subscribe_media_recommend_item_bg</item>
            <item name="android:windowIsFloating">true</item>
            <item name="android:windowContentOverlay">@null</item>
    </style>

    最后在Activity中调用,通过LeaveMyDialogListener 接口来实现在Activity中的点击事件

    MyDialog dialog = new MyDialog(context,R.style.MyDialog,   
            new MyDialog.LeaveMyDialogListener() {   
             @Override   
             public void onClick(View view) {   
                switch(view.getId()){   
                   case R.id.myok:
                            break;
                  case R.id.myedit:
    
                  break;
                  case R.id.mycancle:
                           
                  break;
                  case R.id.mysave:
                  dialog.dismiss();
                             
                  default:
                  break;
                         }   
                     }   
                });   
                dialog.show();

    如果想获得Dialog中的TextView控件可以这样获取,给TextView赋值时候一定要在Dialog show了之后在赋值,你懂得。

    TextView text = (TextView) dialog.findViewById(R.id.miaosu);
  • 相关阅读:
    windows笔记进程的句柄
    windows笔记创建线程的函数CreateThread
    c#实现从其他网站抓取imei码信息,手工输入验证码
    Linux下自动修改用户密码的方法(直接通过命令而不是在终端输入密码)
    Redis学习笔记List数据类型
    在Linux(centos)上安装PHP的mongodb扩展
    CI(codeigniter)如何防止sql注入
    MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
    Sublime Text编辑器如何显示顶部的菜单栏
    C#图片选择器
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5223801.html
Copyright © 2011-2022 走看看