预计onUserInteraction正在为任何用户交互调用.它运作良好PreferenceActivity.但是,当a DialogPreference弹出时,onUserInteraction即使存在用户交互,例如触摸事件,也不再调用.
似乎 DialogPreference并非唯一的情况.无论何时Dialog显示,它都不会报告用户与活动的交互.
但如果我真的需要它,我该怎么办呢.谢谢.
我在这个论坛上四处搜索,但没有得到我真正需要的东西。我需要在 Preference 中有一个自定义 DialogPreference 但那个 DialogPreference 不应该有我讨厌的蓝条标题,而且我已经为其他活动准备了一个活动标题模板 xml 文件,它可以用作自定义活动标题。所以我想使用它在这个对话框中出现。另外我想要自定义首选项文件名,但这里的问题是它创建了两个首选项文件名,一个用于首选项,另一个用于 DialogPreference
但我在这里发现了类似的东西Using EditTextPreference with 2 user input fields
<com.yourdomain.YourDialogPreference
android:title="Title"
android:summary="Summary"
android:key="dialog_preference"/>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经做到了这一点。DialogPreference 打开良好,但如何将我的标题模板附加到此自定义 DialogPreference
android android-preferences sharedpreferences listpreference dialog-preference
我需要在PreferenceActivity中使用AutoCompliteTextView,因此我扩展了DialogPreference.我的auto-complite期待(帮助)用户输入国家/地区名称.如果用户按"取消"或没有输入任何值,我会很好,但是我想确保在关闭对话框之前输入正确的名称.我试图覆盖onClick as
@Override
public void onClick(DialogInterface dialog, int which) {
if (!validator.isValid(textView.toString())) {
onDialogClosed(false);
} else {
//do something here
super.onClick(dialog, which);
}
}Run Code Online (Sandbox Code Playgroud)
还有onDialogClosed
@Override
protected void onDialogClosed(boolean positiveResult) {
if (validator.isValid(textView.toString())) {
//do something here
super.onDialogClosed(positiveResult);
}
}
Run Code Online (Sandbox Code Playgroud) 我们可以在PreferenceActivity中设置很多类型的Preference类型.一旦点击某个偏好,我试图运行一个特定的功能.有没有办法覆盖preferenceScreen或editText onClick?
我试图在首选项中设置对话框首选项,用户只需单击"正向"按钮即可触发某些操作.(清除数据库?否|是)
public class MyDialogPreference extends DialogPreference {
public MyDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult);
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上并不想坚持任何东西,只是触发onSharedPreferenceChanged监听器,所以我可以在活动中处理它.但我无法弄清楚如何触发它
//解
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
if(positiveResult) {
persistBoolean(!getPersistedBoolean(true));
}
Log.d(MainActivity.TAG, "# onDialogClosed: " + positiveResult);
}
Run Code Online (Sandbox Code Playgroud) 我想实现ListPreference的子类,而其构造是被称为(在显示它),它被覆盖的onBindDialogView不是.
public MyListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
Log.v(TAG, "MyListPreference constructed.");
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
Log.v(TAG, "onBindDialogView called");
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我错过了什么?
更新:我在onCreateDialogView()中植入了一条日志消息,它也被调用了.
只有onBindDialogView()是不会被调用.
为什么?调用此回调的条件是什么?
我正在尝试在首选项活动中实现 DialogPreference。我实现了它,但似乎 setTargetFragment 被标记为已弃用。
这是我的旧代码:
override fun onDisplayPreferenceDialog(preference: Preference?) {
val clearStatsDialog = preference as? DialogPreferenceClearStats
if (clearStatsDialog != null) {
val dialogFragment = DialogPrefCompat.newInstance(clearStatsDialog.key)
dialogFragment.setTargetFragment(this, 0)
dialogFragment.positiveResult = {
Toast.makeText(activity, "yes", Toast.LENGTH_LONG).show()
}
dialogFragment.show(this.parentFragmentManager, null)
} else {
super.onDisplayPreferenceDialog(preference)
}
}
Run Code Online (Sandbox Code Playgroud)
我想用 setFragmentResultListener 替换它,但我总是收到“目标片段必须实现 TargetFragment 接口”异常。
有人能帮我吗?
这是完整的代码:
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.AttributeSet
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.DialogPreference
import androidx.preference.Preference
import androidx.preference.PreferenceDialogFragmentCompat
import androidx.preference.PreferenceFragmentCompat
import com.workout.intervaltimer.R
import com.workout.intervaltimer.util.WorkoutTimerUtil
class DialogPreferenceClearStats(context: Context, …Run Code Online (Sandbox Code Playgroud) 我正在开发一个自定义DialogPreference.
当用户在对话框外单击时,它会被取消,我需要避免这种情况.
我知道Dialog有setCanceledOnTouchOutside(boolean cancel)我需要的方法,但DialogPreference没有.
在onBindDialogView我尝试:
getDialog().setCanceledOnTouchOutside(true);
Run Code Online (Sandbox Code Playgroud)
但是getDialog()回归null.
我能怎么做?有人能帮我吗?
这是我的班级:
public class UpdatePreference extends DialogPreference implements View.OnClickListener{
public UpdatePreference(Context context, AttributeSet attrs) {
super(context, attrs);
setPersistent(false);
setDialogLayoutResource(R.layout.update_dialog_layout);
setPositiveButtonText("");
setNegativeButtonText("");
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
//init my components
}
@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);
}
}
Run Code Online (Sandbox Code Playgroud) 我需要在"设置"中实现"重置"选项.单击该设置时,将打开一个简单的对话框,要求确认.
我已经看过了,DialogPreference但似乎无法在任何地方找到一个好的解决方案或教程.有人可以帮帮我吗?我是初学者,想法甚至代码都会非常有帮助,谢谢.