Android 自定义dialog之——答题dialog

先上效果图:
在这里插入图片描述
项目主体:
只有3个类(自定义view,监听接口,调用)
在这里插入图片描述
监听接口(DialogListener):

public interface DialogListener {
    /**
     * 答案A点击事件
     */
    public void onAClick();

    /**
     * 答案B点击事件
     */
    public void onBClick();

    /**
     * 答案C点击事件
     */
    public void onCClick();

    /**
     * 答案D点击事件
     */
    public void onDClick();
}

继承dialog重写,自定义view

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;

import com.example.answergame.R;

/**
 * 自定义答题dialog
 * @author JZ
 * @time 17/03/2021
 */
public class QuesDialog extends Dialog implements View.OnClickListener {

    private DialogListener listener;

    private TextView tv_question;
    private TextView answer_A;
    private TextView answer_B;
    private TextView answer_C;
    private TextView answer_D;

    /**
     * 赋值
     */
    private String question;
    private String answerA;
    private String answerB;
    private String answerC;
    private String answerD;


    public QuesDialog(@NonNull Context context) {
        super(context);
    }

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

        initDialog();
    }

    @Override
    public void show() {
        super.show();
        setQuesAnsValues();
    }

    /**
     * 设置监听
     * @param listener
     * @return
     */
    public QuesDialog setOnDialogClickListener(DialogListener listener){
        this.listener = listener;
        return this;
    }

    /**
     * 设置问题的值
     * @param question
     * @return
     */
    public QuesDialog setQuestion(String question){
        this.question = question;
        return this;
    }

    /**
     * 设置答案A的值
     * @param answerA
     * @return
     */
    public QuesDialog setAnswerA(String answerA){
        this.answerA = answerA;
        return this;
    }

    /**
     * 设置答案B的值
     * @param answerB
     * @return
     */
    public QuesDialog setAnswerB(String answerB){
        this.answerB = answerB;
        return this;
    }

    /**
     * 设置答案C的值
     * @param answerC
     * @return
     */
    public QuesDialog setAnswerC(String answerC){
        this.answerC = answerC;
        return this;
    }

    /**
     * 设置答案D的值
     * @param answerD
     * @return
     */
    public QuesDialog setAnswerD(String answerD){
        this.answerD = answerD;
        return this;
    }



    /**
     * 问题答案赋值
     */
    private void setQuesAnsValues(){

        //设置问题的值
        if (!TextUtils.isEmpty(question)){
            tv_question.setText(question);
        }

        //设置答案A的值
        if (!TextUtils.isEmpty(answerA)){
            answer_A.setText(answerA);
        }

        //设置答案B的值
        if (!TextUtils.isEmpty(answerB)){
            answer_B.setText(answerB);
        }

        //设置答案C的值
        if (!TextUtils.isEmpty(answerC)){
            answer_C.setText(answerC);
        }

        //设置答案D的值
        if (!TextUtils.isEmpty(answerD)){
            answer_D.setText(answerD);
        }

    }

    /**
     * 实例化view
     */
    private void initDialog(){
        tv_question = findViewById(R.id.tv_question);
        answer_A = findViewById(R.id.answer_A);
        answer_B = findViewById(R.id.answer_B);
        answer_C = findViewById(R.id.answer_C);
        answer_D = findViewById(R.id.answer_D);

        answer_A.setOnClickListener(this);
        answer_B.setOnClickListener(this);
        answer_C.setOnClickListener(this);
        answer_D.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id){
            case R.id.answer_A:
                if (listener != null){ listener.onAClick(); }
                break;
            case R.id.answer_B:
                if (listener != null){ listener.onBClick(); }
                break;
            case R.id.answer_C:
                if (listener != null){ listener.onCClick(); }
                break;
            case R.id.answer_D:
                if (listener != null){ listener.onDClick(); }
                break;
            default:break;
        }
    }
}

最后就是调用:

public void showDialog(List<String> allData){
        QuesDialog dialog = new QuesDialog(Jason.mainActivity);
        dialog.setCanceledOnTouchOutside(false);//点击外部不消失
        dialog.setQuestion(allData.get(4))
                .setAnswerA(allData.get(0))
                .setAnswerB(allData.get(1))
                .setAnswerC(allData.get(2))
                .setAnswerD(allData.get(3))
                .setOnDialogClickListener(new DialogListener() {
                    @Override
                    public void onAClick() {
                        dialog.dismiss();//关闭dialog
                    }

                    @Override
                    public void onBClick() {
                        dialog.dismiss();
                    }

                    @Override
                    public void onCClick() {
                        dialog.dismiss();
                    }

                    @Override
                    public void onDClick() {
                        dialog.dismiss();
                    }
                }).show();
    }

就这样,一个简单的自定义答题dialog就完成了!

代码写得菜,请各位大佬见谅!!
最后,我是一个不断创造bug的菜鸟,谢谢大佬的浏览!biubiu~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值