package licola.demo.com.huabandemo.Widget.MyDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import butterknife.ButterKnife; import licola.demo.com.huabandemo.API.Dialog.OnEditDialogInteractionListener; import licola.demo.com.huabandemo.Base.BaseDialogFragment; import licola.demo.com.huabandemo.R; import licola.demo.com.huabandemo.Util.Logger; /** * Created by LiCola on 2016/05/06 14:40 * 画板的修改对话框 * 原则上 不在对话框中做网络操作 因为对话框容易被取消 网络操作不稳定 * 把网络操作回调给调用者 */ public class BoardEditDialogFragment extends BaseDialogFragment { //bundle key private static final String KEYBOARDID = "keyBoardId"; private static final String KEYBOARDNAME = "keyBoardName"; private static final String KEYDESCRIBE = "keyDescribe"; private static final String KEYBOARDTYPE = "keyBoardType"; //UI EditText mEditTextBoardName; EditText mEditTextBoardDescribe; Spinner mSpinnerBoardTitle; private Context mContext; //外部传入的值 private String mStringBoardId; private String mStringBoardName; private String mStringDescribe; private String mStringBoardType; //画板类型 通过context 获取本地资源 private String[] titleList; private boolean isChange = false;//输入值是否有变化 默认false OnEditDialogInteractionListener mListener; @Override protected String getTAG() { return this.toString(); } //依赖注入 因为对话框可能由其他Fragment调用 就不在使用onAttach获取实现 public void setListener(OnEditDialogInteractionListener mListener) { this.mListener = mListener; } @Override public void onAttach(Context context) { super.onAttach(context); mContext = context; } public static BoardEditDialogFragment create(String boardId, String name, String describe, String boardTitle) { Bundle bundle = new Bundle(); bundle.putString(KEYBOARDID, boardId); bundle.putString(KEYBOARDNAME, name); bundle.putString(KEYDESCRIBE, describe); bundle.putString(KEYBOARDTYPE, boardTitle); BoardEditDialogFragment fragment = new BoardEditDialogFragment(); fragment.setArguments(bundle); return fragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { mStringBoardId = args.getString(KEYBOARDID); mStringBoardName = args.getString(KEYBOARDNAME); mStringDescribe = args.getString(KEYDESCRIBE); mStringBoardType = args.getString(KEYBOARDTYPE); } } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Logger.d(TAG); AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(getString(R.string.dialog_title_edit)); LayoutInflater factory = LayoutInflater.from(mContext); final View dialogView = factory.inflate(R.layout.dialog_board_edit, null); initView(dialogView);//初始化View setData();//设置值 builder.setView(dialogView); //消极操作 不需要返回 builder.setNegativeButton(R.string.dialog_negative, null); //中立操作 这里修改成删除操作传递回调用者 回调id name builder.setNeutralButton(R.string.dialog_delete_positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Logger.d(); mListener.onDialogNeutralClick(mStringBoardId,mStringBoardName); } }); //积极操作 回调用户输入 builder.setPositiveButton(R.string.dialog_edit_positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Logger.d(); //如果检测到值有变化才有回调 if (DataChange()) { mListener.onDialogPositiveClick(mStringBoardId, mEditTextBoardName.getText().toString(), mEditTextBoardDescribe.getText().toString(), mStringBoardType); } } }); return builder.create(); } /** * 判定数据是否变化 * true 值有变化 false 没有变化 * * @return */ private boolean DataChange() { //Spinner 控件会影响 所以先取内部变量 boolean isChange = this.isChange; if (isChange) { return true; } //临时变量 String input; input = mEditTextBoardName.getText().toString().trim();//取名称输入框值 //判断 不为空 并且值有变化 if ((!TextUtils.isEmpty(input)) && (!input.equals(mStringBoardName))) { return true; } input = mEditTextBoardDescribe.getText().toString().trim();//取描述输入框值 if ((!TextUtils.isEmpty(input)) && (!input.equals(mStringDescribe))) { return true; } return false; } private void setData() { //画板名称 if (!TextUtils.isEmpty(mStringBoardName)) { mEditTextBoardName.setText(mStringBoardName); } else { mEditTextBoardName.setText(R.string.text_is_default); } //画板描述 可以为空 mEditTextBoardDescribe.setText(mStringDescribe); //画板类型 定义在本地资源中 titleList = getResources().getStringArray(R.array.title_array_all); String[] typeList = getResources().getStringArray(R.array.type_array_all); int selectPosition = 0;//默认选中第一项 if (mStringBoardType != null) { //遍历查找 for (int i = 0, size = titleList.length; i < size; i++) { if (typeList[i].equals(mStringBoardType)) { selectPosition = i; } } } ArrayAdapter<String> adapter = new ArrayAdapter<>(mContext, R.layout.support_simple_spinner_dropdown_item, titleList); mSpinnerBoardTitle.setAdapter(adapter); mSpinnerBoardTitle.setSelection(selectPosition); mSpinnerBoardTitle.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Logger.d("position=" + position); //选中监听事件 产生变化 赋值 String selected = typeList[position]; if (!selected.equals(mStringBoardType)) { mStringBoardType = typeList[position]; isChange = true;//有选择 就表示数据发生变化 } } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } //可能需要保存数据的回调 一般是按下Home键 @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Logger.d(); } //取消的回调 @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); Logger.d(dialog.toString()); } private void initView(View dialogView) { mEditTextBoardName = ButterKnife.findById(dialogView, R.id.edit_board_name); mEditTextBoardDescribe = ButterKnife.findById(dialogView, R.id.edit_board_describe); mSpinnerBoardTitle = ButterKnife.findById(dialogView, R.id.spinner_title); } }