質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

2782閲覧

EditTextPreferenceのダイアログでOKボタンが押されたときの処理

ruikun

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/05/22 10:40

前提・実現したいこと

EditTextPreferenceのダイアログでOKボタンが押された場合に実行したいです.

できたらandroidxに対応した方法をお願いします。
(androidxでは onBindDialogView、onDialogClosedを使用できないようです)

該当のソースコード

java

1public class EditDialog extends EditTextPreference implements DialogInterface.OnClickListener{ 2 3public EditDialog(Context context) { 4 super(context); 5 } 6 public EditDialog(Context context, AttributeSet attrs, int defStyle) { 7 super(context, attrs, defStyle); 8 } 9 public EditDialog(Context context, AttributeSet attrs) { 10 super(context, attrs); 11 } 12 13 @Override 14 public void onClick(DialogInterface dialog, int which) { 15 switch (which) { 16 case DialogInterface.BUTTON_POSITIVE: 17 setPositiveButtonText("変更する"); 18 break; 19 20 case DialogInterface.BUTTON_NEGATIVE: 21 22 break; 23 } 24 }

xml

1<jp.xx.xxxx.xxxxxxx.EditDialog 2 android:key="edit_text" 3 android:selectAllOnFocus="true" 4 android:singleLine="true"/>

試したこと

最初setOnPreferenceChangeListenerを使用していたのですが、実行内容が1つ古く、ずれてしまっていたためOKボタンが押された場合に実行される方法を試していました。

EditTextPreferenceを継承DialogInterface.OnClickListenerを実装?してokボタンが押されたことを確認しようとしたのですが、
ボタンを押しても何も起こりませんでした。

あと、XMLに設定した内容も適応されていませんでした。

onBindViewHolderでのsetPositiveButtonTextはちゃんと表示されているので、別のDialogが表示されているとかではなさそうです。

補足情報(FW/ツールのバージョンなど)

androidxに対応した方法を教えていただけると幸いです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

EditTextPreferenceを継承したクラスを作成

Java

1 2public class EditClass extends EditTextPreference{ 3 4 public EditClass(Context context) { 5 super(context); 6 } 7 public EditClass(Context context, AttributeSet attrs, int defStyle) { 8 super(context, attrs, defStyle); 9 } 10 public EditClass(Context context, AttributeSet attrs) { 11 super(context, attrs); 12 } 13 14} 15

EditTextPreferenceDialogFragmentCompatの継承されたクラスを作成し、OKボタンが押されたときの処理を書く

Java

1 2public class EditTextDialog extends EditTextPreferenceDialogFragmentCompat { 3 4 public static EditTextDialog newInstance(String key) { 5 6 EditTextDialog edittextdialog = new EditTextDialog(); 7 Bundle b = new Bundle(1); 8 b.putString(EditTextPreferenceDialogFragmentCompat.ARG_KEY, key); 9 edittextdialog.setArguments(b); 10 return edittextdialog; 11 12 } 13 14 15 public void onClick(DialogInterface dialog, int which) { 16 super.onClick(dialog, which); 17 18 if (which == DialogInterface.BUTTON_POSITIVE){//okボタンが押されたときの処理 19 20 Log.d("PositiveLog","PositiveButtonが押されました"); 21 22 } 23 24 25 } 26 27} 28

PreferenceFragmentにこのコードを追加

Java

1 2public class Setting extends PreferenceFragmentCompat { 3 4 private static final String DIALOG_FRAGMENT_TAG = 5 "android.support.v7.preference.PreferenceFragment.DIALOG"; 6 7 @Override 8 public void onDisplayPreferenceDialog(Preference preference) { 9 //Dialogが既に表示されているか確認 10 if (getParentFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) { 11 return; 12 } 13 DialogFragment f = null; 14 if (preference instanceof A) { 15 f = EditTextDialog.newInstance(preference.getKey()); 16 } else { 17 super.onDisplayPreferenceDialog(preference); 18 } 19 if (f != null) { 20 f.setTargetFragment(this, 0); 21 //getFragmentManagerは非推奨。代わりにgetParentFragmentManagerを使用 22 f.show(getParentFragmentManager(), DIALOG_FRAGMENT_TAG); 23 } 24 25 26 } 27 2829

EditTextPreference継承クラスのpackage名を入力

XML

1<?xml version="1.0" encoding="utf-8"?> 2<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:android="http://schemas.android.com/apk/res/android"> 4 5 <jp.▴▴▴.oooooo.xxxxxx.EditClass 6 android:key="aaa" 7 android:title="EditTextPreference" /> 8 9</PreferenceScreen>

わかりづらい部分や入力ミスがあったらごめんなさい????

投稿2021/06/08 06:02

編集2021/06/08 06:14
ruikun

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

EditTextPreferenceで入力する際に表示されるダイアログをあーだこーだしたい、という話であれば、以下を参考にしてください。

(androidxでは onBindDialogView、onDialogClosedを使用できないようです)

EditTextPreference#onBindDialogViewなどの話をしているのであれば、別にandroidxだから、というわけではありません。
サポートライブラリの頃から、これらのものは使わず、fragmentを使う方針になっています。
(それらのメソッドの役割は、PreferenceDialogFragmentCompatに移っています)

投稿2021/05/26 11:58

katsuko

総合スコア3538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruikun

2021/05/29 06:52

返信が遅くなってしまい申し訳ございません。 androidxが原因ではないのですね!勉強になりました! 教えてくださったサイトを参考にさせてもらおうと思ったのですが、私の知識不足でどこをどのように変更すればよいのかわからずそのあたりを教えていただけると幸いです。 https://stackoverflow.com/a/20565983 あと、この方のようなソースコードを参考につくらせてもらっていたのですが、もう使用できないのでしょうか?出来たらそれも教えてほしいです。
katsuko

2021/05/29 16:20

そもそも、EditTextPreferenceを継承してもダメだということです。 ダイアログを表示する際にPreferenceFragmentCompat#onDisplayDialogが呼ばれるので、該当のPreferenceであった場合に自分でダイアログを表示してください。 その辺りは、先のサイトのとおりです。 (自分でダイアログを表示するのだから、あーだこーだできる、ということは、理解できますよね)
ruikun

2021/05/31 08:06

わかりました。 教えてくださったサイトを参考に作らせてもらいます! 助かりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問