您的位置:首页 > 其它

DialogFragment的使用+j接口回调

2015-08-21 15:52 246 查看
虽然android有Alterdialog和Progressiondialogl两种,但是这两种都太局限了,有个折中的方法是重新定义个layout,并把该layout设置成dialog样式,这样可以间接的自定义个dialog样式,但是现在android提供了一个更基础的类DialogFragment。然后利用接口回调的方法对点击事件进行监听。

1.DialogFragment.class

@SuppressLint("NewApi")

public class DiagFragment extends DialogFragment implements OnClickListener {

private Context mContext;

private TextView mTv1, mTv2, mTv3;

public interface OnDeptCallBack {

public void onCallBack(String st);

}

private OnDeptCallBack onBack;

public DiagFragment(){

//去除默认的dialog头部

int style = DialogFragment.STYLE_NO_TITLE;

setStyle(style, 0);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.list_dialog, null);

mContext = getActivity();

initView(view);

return view;

}

/**

* 初始化控件

*/

private void initView(View view) {

mTv1 = (TextView) view.findViewById(R.id.tv_1);

mTv2 = (TextView) view.findViewById(R.id.tv_2);

mTv3 = (TextView) view.findViewById(R.id.tv_3);

mTv1.setOnClickListener(this);

mTv2.setOnClickListener(this);

mTv3.setOnClickListener(this);

}

/**

* @return the onBack

*/

public OnDeptCallBack getOnBack() {

return this.onBack;

}

/**

* @param onBack

* the onBack to set

*/

public void setOnBack(OnDeptCallBack onBack) {

this.onBack = onBack;

}

/**

* 设置弹出的Dialog的样式,这边是居中效果

*

*/

@Override

public void onResume() {

LayoutParams params = getDialog().getWindow().getAttributes();

DisplayMetrics mDisplayMetrics = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(mDisplayMetrics);

params.width = mDisplayMetrics.widthPixels / 2;

params.height = LayoutParams.WRAP_CONTENT;

getDialog().getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);

super.onResume();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.tv_1:

onBack.onCallBack("这是text1");

break;

case R.id.tv_2:

onBack.onCallBack("这是text2");

break;

case R.id.tv_3:

onBack.onCallBack("这是text3");

break;

default:

break;

}

}

}

2.list_dialog.xml

三个textview而已,该布局根据需求而定

3.MainActivity.class

public class MainActivity extends Activity {

private Button mBtn;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mBtn=(Button)findViewById(R.id.bt);

mBtn.setOnClickListener(new OnClickListener() {

@SuppressLint("NewApi")

@Override

public void onClick(View arg0) {

final DiagFragment diaf=new DiagFragment();

diaf.setOnBack(new OnDeptCallBack() {

@Override

public void onCallBack(String st) {

Toast.makeText(MainActivity.this, st, Toast.LENGTH_LONG);

diaf.dismiss();

}

});

diaf.show(MainActivity.this.getFragmentManager(), null);

}

});

}

至此整个项目结束,当你在dialogfragment点击那些textview,在activity就可以根据接口回调监听事件。

如果不是很明白的可以下载源码看看:)
http://download.csdn.net/detail/u013651405/9032603
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: