dialog多次弹出,但文本还是显示第一次传入set的值

问题:dialog多次弹出,但文本还是显示第一次传入set的值。

原因:onCreate只会走一次,在里面setText也只会走一次,

解决:onStart 和 show 会多次调用,所以在这两个方法中进行设置值即可。

分析dialog调用时的周期:

MyDialog:


//打开dialog:
// 构造方法
// set方法
// onCreate
// onStart
// show

//再次打开dialog:
// onStop
// set
// onStart
// show
public class MyDialog extends Dialog {
    private String msg;
    private Context context;
    private TextView msgTv;
    private TextView cancelBtn;
    private TextView confirmBtn;

    public MyDialog(Context context) {
        super(context, R.style.dialog);
        this.context = context;

        System.out.println("2==================构造");
    }

    public void setPassengerNum(int passengerNum) {
        msg = "" + passengerNum;
        System.out.println("2==================set");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("2==================onStop");

    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("2==================onStart");

        if (!TextUtils.isEmpty(msg)) {      //在此设置
            msgTv.setText(msg);
        }

    }

    @Override
    public void show() {
        super.show();
        System.out.println("2==================show");

    }

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

        init();
        msgTv = ((TextView) this.findViewById(R.id.dialog_departure_msg_tv));
        cancelBtn = ((TextView) this.findViewById(R.id.dialog_departure_cancel_btn));
        confirmBtn = ((TextView) this.findViewById(R.id.dialog_departure_confirm_btn));


        cancelBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
                onConfirmListener.onDepartureFailure();
            }
        });
        confirmBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
                onConfirmListener.onDepartureOk();
            }
        });

        System.out.println("2==================onCreate");

    }

    private void init() {
        Window window = getWindow();
        if (window != null) {
            window.setDimAmount(0.5f);
        }
        setCancelable(false);
        setCanceledOnTouchOutside(false);
    }

    private OnConfirmListener onConfirmListener;

    public interface OnConfirmListener {
        void onDepartureOk();

        void onDepartureFailure();
    }

    public void setOnConfirmListener(OnConfirmListener onConfirmListener) {
        this.onConfirmListener = onConfirmListener;
    }
}

MainActivity:


public class MainActivity extends AppCompatActivity implements MyDialog.OnConfirmListener {

    private int count;
    private MyDialog myDialog;
    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("1============onCreate");

        setContentView(R.layout.activity_main);
        TextView btn2 = (TextView) findViewById(R.id.btn2);
        TextView btn1 = (TextView) findViewById(R.id.btn1);

        ShortcutBadger.applyCount(this.getApplicationContext(), 60);

        handler = new Handler();

        myDialog = new MyDialog(MainActivity.this);
        myDialog.setOnConfirmListener(MainActivity.this);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count = 100;
                setDialog();
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count = 99;
                setDialog();
            }
        });

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("1============onRestart");

    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("1============onStart");

    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("1============onResume");

    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("1============onPause");

    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("1============onStop");

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("1============onDestroy");

    }

    private void setDialog() {
        myDialog.setPassengerNum(count);
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                myDialog.show();
            }
        }, 1000);
        System.out.println("1============" + count);
    }

    @Override
    public void onDepartureOk() {
        System.out.println("1============onDepartureOk");
    }

    @Override
    public void onDepartureFailure() {
        System.out.println("1============onDepartureFailure");
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        System.out.println("1============onBackPressed");

    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        System.out.println("1============onSaveInstanceState");

    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        System.out.println("1============onNewIntent");

    }

}

打印结果:

以下 2为dialog 1为activity

初始化activity和dialog
1============onCreate
2==================构造
1============onStart
1============onResume

打开dialog
2==================set
2==================onCreate
2==================onStart
2==================show

关闭dialog
2==================onStop

按home键
1============onPause
1============onSaveInstanceState
1============onStop

重新进入
1============onRestart
1============onStart
1============onResume

再次打开dialog
2==================set
2==================onStart
2==================show

在dialog中设置textview的文本,可在onStart和show的super前设置。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值