问题:
今天的需求是点击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<CompanyListResult> 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();