From b40ee70d3455a91364967166291feb97160ab4c8 Mon Sep 17 00:00:00 2001 From: MRSa Date: Tue, 17 Apr 2018 23:54:21 +0900 Subject: [PATCH] =?utf8?q?DataEditDialog=E3=81=AEDialogFragment=E5=8C=96(A?= =?utf8?q?mbient=E6=99=82=E3=81=AB=E6=93=8D=E4=BD=9C=E3=81=A7=E3=81=8D?= =?utf8?q?=E3=81=AA=E3=81=84=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E6=94=B9?= =?utf8?q?=E4=BF=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../joggingtimer/recorddetail/DetailActivity.java | 10 +- .../joggingtimer/utilities/DataEditDialog.java | 115 ++++++++++++++++----- 2 files changed, 98 insertions(+), 27 deletions(-) diff --git a/wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailActivity.java b/wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailActivity.java index e5de5f3..e732a59 100644 --- a/wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailActivity.java +++ b/wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailActivity.java @@ -1,5 +1,6 @@ package net.osdn.gokigen.joggingtimer.recorddetail; +import android.app.FragmentManager; import android.os.Bundle; import android.support.v7.widget.DividerItemDecoration; import android.support.wear.widget.WearableLinearLayoutManager; @@ -266,7 +267,6 @@ public class DetailActivity extends WearableActivity implements RecordDetailSetu { case R.id.menu_edit_title: // タイトルの編集 - DataEditDialog dialog = new DataEditDialog(this); String title = ""; int iconId = R.drawable.ic_android_black_24dp; RecordDetailSetup.EditIndexData data = setupper.getEditIndexData(); @@ -275,7 +275,13 @@ public class DetailActivity extends WearableActivity implements RecordDetailSetu iconId = data.getIcon(); title = data.getTitle(); } - dialog.show(iconId, title, this); + DataEditDialog dialog = DataEditDialog.newInstance(iconId, title, this); + FragmentManager manager = getFragmentManager(); + String tag = "dialog"; + if (manager != null) + { + dialog.show(manager, tag); + } ret = true; break; diff --git a/wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/DataEditDialog.java b/wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/DataEditDialog.java index fccb1f1..8f84baf 100644 --- a/wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/DataEditDialog.java +++ b/wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/DataEditDialog.java @@ -1,12 +1,14 @@ package net.osdn.gokigen.joggingtimer.utilities; +import android.app.Activity; import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.content.res.TypedArray; -import android.graphics.Color; +import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.wearable.activity.WearableActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -23,24 +25,53 @@ import net.osdn.gokigen.joggingtimer.R; * * */ -public class DataEditDialog +public class DataEditDialog extends DialogFragment { private final String TAG = toString(); - private final WearableActivity activity; + private int iconResId = 0; + private String title = ""; private int selectedPosition = 0; + private DataEditDialog.Callback callback = null; + Dialog myDialog = null; - public DataEditDialog(WearableActivity activity) + /** + * + * + */ + public static DataEditDialog newInstance(int iconResId, String title, @NonNull DataEditDialog.Callback callback) + { + DataEditDialog instance = new DataEditDialog(); + instance.prepare(iconResId, title, callback); + + // パラメータはBundleにまとめておく + Bundle arguments = new Bundle(); + arguments.putString("title", title); + //arguments.putString("message", message); + instance.setArguments(arguments); + + return (instance); + } + + /** + * + * + */ + private void prepare(int iconResId, String title, @NonNull DataEditDialog.Callback callback) { - this.activity = activity; + this.iconResId = iconResId; + this.title = title; + this.callback = callback; } /** * - * @param iconResId アイコンリソース - * @param callback 結果をコールバック + * */ - public void show(int iconResId, String title, final DataEditDialog.Callback callback) + @Override + public @NonNull Dialog onCreateDialog(Bundle savedInstanceState) { + Activity activity = getActivity(); + // 確認ダイアログの生成 final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity); @@ -74,7 +105,6 @@ public class DataEditDialog { e.printStackTrace(); } - alertDialog.setIcon(iconResId); alertDialog.setMessage(activity.getString(R.string.dialog_message_data_edit)); alertDialog.setCancelable(true); @@ -86,13 +116,23 @@ public class DataEditDialog { try { - String array[] = activity.getResources().getStringArray(R.array.icon_selection_id); - callback.dataEdited(Integer.parseInt(array[selectedPosition]), titleText.getText().toString()); + Activity activity = getActivity(); + if (activity != null) + { + String array[] = activity.getResources().getStringArray(R.array.icon_selection_id); + if (callback != null) + { + callback.dataEdited(Integer.parseInt(array[selectedPosition]), titleText.getText().toString()); + } + } } catch (Exception e) { e.printStackTrace(); - callback.cancelled(); + if (callback != null) + { + callback.cancelled(); + } } dialog.dismiss(); } @@ -101,18 +141,36 @@ public class DataEditDialog // ボタンを設定する (キャンセルボタン) alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) - { - callback.cancelled(); + public void onClick(DialogInterface dialog, int which) { + if (callback != null) + { + callback.cancelled(); + } dialog.cancel(); } }); - // 確認ダイアログを表示する - alertDialog.show(); + // 確認ダイアログを応答する + myDialog = alertDialog.create(); + return (myDialog); } - // コールバックインタフェース + + @Override + public void onPause() + { + super.onPause(); + Log.v(TAG, "AlertDialog::onPause()"); + if (myDialog != null) + { + myDialog.cancel(); + } + } + + /** + * コールバックインタフェース + * + */ public interface Callback { void dataEdited(int iconId, String title); // OKを選択したとき @@ -125,7 +183,7 @@ public class DataEditDialog private final int layoutResourceId; private final String[] stringList; - private IconListAdapter(WearableActivity activity, int layoutResourceId, String[] strings) + private IconListAdapter(Activity activity, int layoutResourceId, String[] strings) { super(activity, layoutResourceId, strings); inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); @@ -155,11 +213,18 @@ public class DataEditDialog public @NonNull View getView(int position, View convertView, @NonNull ViewGroup parent) { View row = inflater.inflate(layoutResourceId, parent, false); - TextView target = row.findViewById(R.id.selection_icon); - TypedArray imgs = activity.getResources().obtainTypedArray(R.array.icon_selection); - int rscId = imgs.getResourceId(position, R.drawable.ic_label_outline_black_24dp); - target.setCompoundDrawablesWithIntrinsicBounds(rscId, 0, 0, 0); - imgs.recycle(); + try + { + TextView target = row.findViewById(R.id.selection_icon); + TypedArray imgs = getActivity().getResources().obtainTypedArray(R.array.icon_selection); + int rscId = imgs.getResourceId(position, R.drawable.ic_label_outline_black_24dp); + target.setCompoundDrawablesWithIntrinsicBounds(rscId, 0, 0, 0); + imgs.recycle(); + } + catch (Exception e) + { + e.printStackTrace(); + } return (row); } -- 2.11.0