gpt4 book ai didi

java - 如何从 Edittext Preference 捕获用户输入?

转载 作者:行者123 更新时间:2023-12-02 11:46:22 24 4
gpt4 key购买 nike

不要将其标记为重复,因为我在互联网上找不到任何有用的内容。

我在我的 Android 应用程序中实现了首选项屏幕。我想添加一个功能,用户可以单击编辑文本首选项,并且如果他填写该字段“确认”那么应用程序的数据库将被清空,但我不知道如何从对话框中捕获用户输入。

到目前为止我所拥有的

if (preference instanceof EditTextPreference) {

if (preference.getKey().matches("pref_reset_savings")){

if(((EditTextPreference) preference).getText().matches("CONFIRM")){

Log.i("reset", "confirmed");

}

}

}

这给了我一个 NullPointerException

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.musa.mymoneybox/activities.Settings}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setOnPreferenceChangeListener(android.preference.Preference$OnPreferenceChangeListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setOnPreferenceChangeListener(android.preference.Preference$OnPreferenceChangeListener)' on a null object reference
at activities.Settings.bindPreferenceSummaryToValue(Settings.java:49)
at activities.Settings.access$000(Settings.java:14)
at activities.Settings$PrefFragment.onCreate(Settings.java:40)
at android.app.Fragment.performCreate(Fragment.java:2593)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1234)
at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2415)
at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2194)
at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2148)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2049)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3044)
at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2991)
at android.app.FragmentController.dispatchActivityCreated(FragmentController.java:178)
at android.app.Activity.performCreateCommon(Activity.java:6969)
at android.app.Activity.performCreate(Activity.java:6977)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)

我的设置 Activity 完整代码

package activities;

import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.util.Log;

import com.musa.mymoneybox.R;

import configs.AppCompatPreferenceActivity;

public class Settings extends AppCompatPreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

this.runOnUiThread(new Runnable() {
public void run() {

//Load Settings Fragment
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefFragment()).commit();

}});

}

public static class PrefFragment extends PreferenceFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_main);

bindPreferenceSummaryToValue(findPreference("pref_sound"));

bindPreferenceSummaryToValue(findPreference("pref_notifications"));

}
}

private static void bindPreferenceSummaryToValue(Preference preference) {

preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);

sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getBoolean(preference.getKey(), true));
}

private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {

if (newValue instanceof Boolean) {
boolean isChecked = (boolean) newValue;

if(preference.getKey().matches("pref_notifications")){


if (isChecked){

Log.i("Notifications", "True");

} else {

Log.i("Notifications", "False");
}
}

if (preference instanceof EditTextPreference) {

if (preference.getKey().matches("pref_reset_savings")){

if(((EditTextPreference) preference).getText().matches("CONFIRM")){

Log.i("reset", "confirmed");

}

}

}

}

return true;
}
};

}

任何帮助将不胜感激!

最佳答案

在使用之前尝试将 preference 转换为 EditTextPreference:

if (preference instanceof EditTextPreference) {
EditTextPreference newPreference = (EditTextPreference) preference;
if (newPreference.getKey().matches("pref_reset_savings")){
if(newPreference.getText().matches("CONFIRM")){
Log.i("reset", "confirmed");
}
}
}

希望有帮助。

关于java - 如何从 Edittext Preference 捕获用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48173831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com