自定义Dialog以及Dialog返回值到Activity

步骤:

1.定义自定义的Dialog的布局文件

2.写一个类MyDialog继承Dialog

3.Dialog 返回值到Activity的方法是定义一个接口,接口中定义返回值到Activity的方法,MyDialog实现这个接口,然后在需要的位置调用接口中的方法,Activity实现这个接口,

重写接口的方法

代码如下

return_code_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp"
    android:background="@color/white"
    android:weightSum="1">

    <TextView
        android:id="@+id/title"
        android:layout_width="321dp"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textSize="24dp"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="@color/black"
        />
    <TextView
        android:id="@+id/content"
        android:layout_marginTop="10dp"
        android:layout_width="305dp"
        android:layout_gravity="center"
        android:textColor="@color/viewfinder_mask"
        android:layout_height="wrap_content"
        android:textSize="18dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
   <EditText
       android:layout_width="0dp"
       android:layout_weight="1"
       android:gravity="center"
       android:textSize="20dp"
       android:password="true"
       android:layout_height="50dp"
       android:background="@drawable/bg_edit_normal"
       android:id="@+id/psw_1"
       android:digits="1234567890"/>
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_2"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_3"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_4"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_5"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="50dp"
        android:background="@drawable/bg_edit_normal"
        android:id="@+id/psw_6"
        android:password="true"
        android:gravity="center"
        android:textSize="20dp"
        android:digits="1234567890"
        />
    </LinearLayout>
</LinearLayout>
interface MyJudgePasswordInterface
public interface MyJudgePasswordInterface {
    public void returnJudgePasswordResult(boolean result);
}

PasswordDialog.java

package com.example.administrator.bigelephantbike;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;

import org.w3c.dom.Text;

/**
 * Created by Administrator on 2016/4/3.
 */
public class PasswordDialog extends Dialog implements TextWatcher,View.OnKeyListener{

    private Context context;
    private String title;
    private String content;
    private TextView titleTextView;
    private TextView contentTextVIew;
    private EditText eidtText1;
    private EditText eidtText2;
    private EditText eidtText3;
    private EditText eidtText4;
    private EditText eidtText5;
    private EditText eidtText6;
    private String password;
    private int current=0;
    private String[]passwordInput =new String[6];
    private int maxLen =1;//限制EditText的输入长度
    private MyJudgePasswordInterface myJudgePasswordInterface;

    public PasswordDialog(Context context) {
        super(context);
    }
    public PasswordDialog(Context context, int themeResId) {
        super(context, themeResId);
    }
    public PasswordDialog(Context context,String title,String content,String password,MyJudgePasswordInterface myJudgePasswordInterface){
        super(context,R.style.add_dialog);
        this.context =context;
        this.title=title;
        this.content =content;
        this.password =password;
        this.myJudgePasswordInterface =myJudgePasswordInterface;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }
    void init(){
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.return_code_dialog, null);
        setContentView(view);

        titleTextView =(TextView)findViewById(R.id.title);
        contentTextVIew=(TextView)findViewById(R.id.content);
        eidtText1 =(EditText)findViewById(R.id.psw_1);
        eidtText2 =(EditText)findViewById(R.id.psw_2);
        eidtText3 =(EditText)findViewById(R.id.psw_3);
        eidtText4 =(EditText)findViewById(R.id.psw_4);
        eidtText5 =(EditText)findViewById(R.id.psw_5);
        eidtText6 =(EditText)findViewById(R.id.psw_6);

        titleTextView.setText(title);
        contentTextVIew.setText(content);

        //锁定数字键盘
        eidtText1.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText2.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText3.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText4.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText5.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
        eidtText6.setInputType(EditorInfo.TYPE_CLASS_NUMBER);

        //添加内容改变的事件监听
        eidtText1.addTextChangedListener(this);
        eidtText2.addTextChangedListener(this);
        eidtText3.addTextChangedListener(this);
        eidtText4.addTextChangedListener(this);
        eidtText5.addTextChangedListener(this);
        eidtText6.addTextChangedListener(this);

        eidtText1.setOnKeyListener(this);
        eidtText2.setOnKeyListener(this);
        eidtText3.setOnKeyListener(this);
        eidtText4.setOnKeyListener(this);
        eidtText4.setOnKeyListener(this);
        eidtText5.setOnKeyListener(this);
        eidtText6.setOnKeyListener(this);

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        int length = 0;
        //Log.d("test","current="+current+"我变了");
        switch (current) {
            case 0:
                length = eidtText1.getText().length();
                changeFocus(length, eidtText2);
                passwordInput[0] = eidtText1.getText().toString();
                break;
            case 1:
                length = eidtText2.getText().length();
                changeFocus(length, eidtText3);
                passwordInput[1] = eidtText2.getText().toString();
                break;
            case 2:
                length = eidtText3.getText().length();
                changeFocus(length, eidtText4);
                passwordInput[2] = eidtText3.getText().toString();
                break;
            case 3:
                length = eidtText4.getText().length();
                changeFocus(length, eidtText5);
                passwordInput[3] = eidtText4.getText().toString();
                break;
            case 4:
                length = eidtText5.getText().length();
                changeFocus(length, eidtText6);
                passwordInput[4] = eidtText5.getText().toString();
                break;
            case 5:
                length = eidtText6.getText().length();
                if (length >= 1) {
                    passwordInput[5] = eidtText6.getText().toString();
                    myJudgePasswordInterface.returnJudgePasswordResult(validatePassword());
                    this.cancel();
                }
        }
    }
    @Override
    public void afterTextChanged(Editable s) {

    }
    void changeFocus(int l,EditText editText){
        if(l >= maxLen){
            current++;
            editText.setFocusable(true);
            editText.setFocusableInTouchMode(true);
            editText.requestFocus();
            editText.findFocus();
        }
    }
    boolean validatePassword(){
        current=0;
        StringBuffer stringBuffer=new StringBuffer();
        for(int i=0;i<passwordInput.length;i++){
            stringBuffer.append(passwordInput[i]);
        }
        String psw =stringBuffer.toString();
        return psw.equals(password);
    }
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DEL
                && event.getAction() == KeyEvent.ACTION_DOWN) {
            current--;
            switch(current){
                case 0:eidtText1.setText("");requestF(eidtText1);break;
                case 1:eidtText2.setText("");requestF(eidtText2);break;
                case 2:eidtText3.setText("");requestF(eidtText3);break;
                case 3:eidtText4.setText("");requestF(eidtText4);break;
                case 4:eidtText5.setText("");requestF(eidtText5);break;
                case 5:eidtText6.setText("");requestF(eidtText6);break;
            }
        }
        return false;
    }
    void requestF(EditText editText){
        editText.setFocusable(true);
        editText.setFocusableInTouchMode(true);
        editText.requestFocus();
        editText.findFocus();
    }
}

ChargeActivity.java

package com.example.administrator.bigelephantbike;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import wheelview.ArrayWheelAdapter;
import wheelview.OnWheelChangedListener;
import wheelview.WheelView;

public class ChargeActivity extends Activity implements OnWheelChangedListener,View.OnClickListener{
   private Button recoverBtn;
    private String passwordReturn="123456";
    private String passwordRecover="234567";

    private PasswordDialog myDialog;
    //密码输入是否正确
    private boolean pswResult;
    //实现MyJudgePasswordInterface
    private MyJudgePasswordInterface myJudgePasswordInterface;
    //1标识输入的是还车密码,2表示输入的是恢复密码
    private int flag=0;

    private String []nums={"0","1","2","3","4","5","6","7","8","9"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_charge);

        returnBtn =(Button)findViewById(R.id.return_btn);
        recoverBtn =(Button)findViewById(R.id.recover_btn);

        myJudgePasswordInterface=new MyJudgePasswordInterface() {
            @Override
            public void returnJudgePasswordResult(boolean result) {
                pswResult = result;            }
        };

        returnBtn.setOnClickListener(this);
        recoverBtn.setOnClickListener(this);

    }
    @Override
    public void onClick(View v) {
        //当点击还车按钮时
        if(v.getId()==R.id.return_btn){
            flag=1;
            myDialog =new PasswordDialog(ChargeActivity.this,this.getResources().getString(R.string.input_return_code),this.getResources().getString(R.string.return_tips),passwordReturn,myJudgePasswordInterface);
            myDialog.show();
        }
        if(v.getId()==R.id.recover_btn){
            flag=2;
            myDialog=new PasswordDialog(ChargeActivity.this,this.getResources().getString(R.string.input_recover_tips),this.getResources().getString(R.string.recover_tips),passwordRecover,myJudgePasswordInterface);
            myDialog.show();
        }
    }
}
				
时间: 2024-10-10 09:25:43

自定义Dialog以及Dialog返回值到Activity的相关文章

linux shell自定义函数(定义、返回值、变量作用域)介绍

http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以

android 16 带返回值的activity

main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id=

转 linux shell自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu

linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu

Linux Shell 自定义函数(定义、返回值、变量作用域)介绍

定义Shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1. 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. return后跟数值n(0-255). 示例(test_fun.sh): #!/bin/sh fSum 3 2; fSum() { ec

activity之间参数传递&amp;&amp;获取activity返回值&amp;&amp;activity生命周期

Activity之间参数传递 A activity想将参数传给B activity时可以利用Intent将消息带过去 Intent intent = new Intent(this,BActivity.class); intent.putExtra("xxxx", "xxxx"); 数据量多的话可以使用 Bundle bundle = new Bundle(); intent.putExtras(bundle); 获取activity返回值 A activity调用

2.Activity返回值

1.意图方法:startActivityForResult---请求码的startActivity 2.设置返回码和返回值/结束Activity:setResult和finish 3.接收返回值:重写onActivityResult,判断请求码和返回码 Manifest.xml:清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schem

1.2Activity返回值

1.意图方法:startActivityForResult---请求码的startActivity 2.设置返回码和返回值/结束Activity:setResult和finish 3.接收返回值:重写onActivityResult,判断请求码和返回码 Manifest.xml:清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schem

Activity的跳转及返回值,activity的生命周期

Activity生命周期 从创建到销毁的生命周期: onCreate()→onStart()→onResume()→onPouse()→onStop()→onDestroy() 从起动到后台再到前台: onCreate()→onStart()→onResume()→onPouse()→onStop()→onRestart()→onStart()→onResume() 启动第二个activity 1. 创建new activity 2. 创建对应的new xml布局文件 3. 在new activ