DialogFragment的使用+j接口回调

来源:互联网 发布:步兵升级数据 编辑:程序博客网 时间:2024/05/22 13:16

虽然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

0 0
原创粉丝点击