Dialog 回调问题

问题:

今天的需求是点击TextView 弹出一个dialog dialog里面是个list 点击item dialog.dismiss() 把item的值传到Activity

以前写过类似的需求主要就是点击事件的回调,区别是以前的dialog里面有个按钮 点击按钮回传值

//activity
 private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.ok:
                        //这里处理回调的数据
                        break;
        }
    };
/*
*调用dialog  把onClickListener传递给dialog
*/
 CargoNameDialog = new CargoNameDialog(this,R.style.MyDialogStyleBottom,onClickListener);
 CargoNameDialog.show();
//Dialog
 private View.OnClickListener mClickListener;
 public CargoNameDialog(Activity context, int theme, View.OnClickListener clickListener) {
        super(context, theme);
        this.context = context;
        this.mListener = clickListener;
    }
/*
*点击按钮
*/
 // 为按钮绑定点击事件监听器
        btnOk.setOnClickListener(mClickListener);

这次的需求 我首先想到的是在list的点击事件里绑定监听器,但是我自己看着都别扭,结果果然报错

//dialog
 mlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                    //这里绑定  
                       mlistView.setOnClickListener(mClickListener);

            }
        });

后面看了网上的解决方案就是添加一个接口

 /*
  * 回调函数,用于在Dialog的监听事件触发后 数据的接口
  */
//dialog
    public interface OnSureClickListener {
        void getModel(CompanyListResult model);
    }
//然后在构造函数里添加这个接口
 public OnSureClickListener mListener;
 public CargoNameDialog(Activity context, int theme, OnSureClickListener  clickListener,List companyList) {
        super(context, theme);
        this.context = context;
        this.mListener = clickListener;
        this.companyList = companyList;
    }
//主要是activity的调用 一开始我是这么调用的
View.OnClickListener click_new = new View.OnClickListener() {
            public void onClick(View v) {
               CargoNameDialog.OnSureClickListener listener1 = new CargoNameDialog.OnSureClickListener() {
                    public void getModel(CompanyListResult model) {
                        Log.e("demoActivity", "demoActivity:---------------------------------------------------------- ");
                    }
                CargoNameDialog.show();
                };

            }
        };

但是这个很明显,show()在方法里,肯定弹不出来dialog(结果就是这样)
最终版本问题解决,还是在dialog添加接口 就是调用的时候不一样

  mCargoNameDialog =new CargoNameDialog(CDPreparationActivity.this, R.style.MyDialogStyleBottom, new CargoNameDialog.OnSureClickListener() {
            @Override
            public void getModel(CompanyListResult model) {
                chooseTv.setText(model.getCompanyName());
            }
        }, allCompanys);
        mCargoNameDialog();

你可能感兴趣的:(Dialog 回调问题)