package com.lq.fragment; import java.lang.reflect.Field; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import android.view.LayoutInflater; import android.widget.EditText; import android.widget.Toast; import com.lq.activity.MutipleEditActivity; import com.lq.xpressmusic.R; import com.lq.dao.PlaylistDAO; /** * @author lq 2013-6-1 lq2625304@gmail.com * */ public class AddTrackToNewPlaylistDialogFragment extends DialogFragment { private static final String TAG = AddTrackToNewPlaylistDialogFragment.class .getSimpleName(); private static final String AUDIO_ID = "audio_id"; private long mAudioIds[] = null; private EditText mView_et_PlaylistName = null; private AlertDialog mAlertDialog = null; /** * 产生一个EditTextDialogFragment实例 * * @param title * 对话框的标题 * @param content * 文本输入框预置内容 * @param hint * 文本输入框提示信息 * @param listner * OnMyDialogInputListener实例,以接受输入事件的变化 * */ public static AddTrackToNewPlaylistDialogFragment newInstance(long[] audioId) { AddTrackToNewPlaylistDialogFragment f = new AddTrackToNewPlaylistDialogFragment(); Bundle args = new Bundle(); args.putLongArray(AUDIO_ID, audioId); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mView_et_PlaylistName = (EditText) LayoutInflater.from(getActivity()) .inflate(R.layout.edittext_dialog, null); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Log.i(TAG, "onCreateDialog"); Resources r = getActivity().getResources(); String title = r.getString(R.string.create_playlist); String hint = r.getString(R.string.input_playlist_name); mView_et_PlaylistName.setHint(hint); if (getArguments() != null) { mAudioIds = getArguments().getLongArray(AUDIO_ID); } mAlertDialog = new AlertDialog.Builder(getActivity()).setTitle(title) .setView(mView_et_PlaylistName) .setPositiveButton(R.string.confirm, mPositiveClickListener) .setNegativeButton(R.string.cancel, mNegativeClickListener) .create(); return mAlertDialog; } @Override public void onDestroy() { super.onDestroy(); mAlertDialog = null; } private void addTrackToPlaylist(String newListName) { int newListId = PlaylistDAO.createPlaylist(getActivity() .getContentResolver(), newListName); if (newListId == -1) { // 有重名播放列表,提示列表名已经存在 Toast.makeText( getActivity(), getActivity().getString( R.string.playlist_has_already_existed), Toast.LENGTH_SHORT).show(); setWindowShownWhenClickedButton(true); } else { // 无重名,则添加歌曲到新建的播放列表中 if (mAudioIds != null) { PlaylistDAO.addTrackToPlaylist(getActivity() .getContentResolver(), newListId, mAudioIds); // 提示添加成功 Toast.makeText(getActivity(), getActivity().getString(R.string.add_success), Toast.LENGTH_SHORT).show(); // 如果是从多选界面打开本界面的,则关闭多选界面 LocalBroadcastManager.getInstance(getActivity()).sendBroadcast( new Intent(MutipleEditActivity.ACTION_FINISH)); } setWindowShownWhenClickedButton(false); dismiss(); } } /** * 利用反射将父类mShowing变量设为false,表示对话框已关闭,父类不会再因为按了按钮而关闭对话框 * * @param isShown * true表示点击按钮时对话框不会关闭,false为点击按钮对话框会关闭 */ private void setWindowShownWhenClickedButton(boolean isShown) { try { Field field = mAlertDialog.getClass().getSuperclass() .getDeclaredField("mShowing"); field.setAccessible(true); // 将mShowing变量设为false,表示对话框已关闭 field.set(mAlertDialog, !isShown); } catch (Exception e) { } } private DialogInterface.OnClickListener mPositiveClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mView_et_PlaylistName.getText().toString().equals("")) { // 如果输入框为空,提示输入 Toast.makeText(getActivity(), getActivity().getString(R.string.input_playlist_name), Toast.LENGTH_SHORT).show(); setWindowShownWhenClickedButton(true); } else { addTrackToPlaylist(mView_et_PlaylistName.getText().toString()); } } }; private DialogInterface.OnClickListener mNegativeClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setWindowShownWhenClickedButton(false); dismiss(); } }; }