問題:
今天的需求是點擊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();