当我点击 edittextpreference 时,EditText 输入没有出现

EditText input doesn't appear when I click in an edittextpreference

我正在使用 editTextPreference 来实现设置 Activity。我的问题是,当我单击 EditTextPreference 时,它​​会显示一个带有首选项标题的对话框,但不会出现要写入的编辑文本。 我已经搜索过这个问题,但似乎没有人遇到过。任何帮助将不胜感激

我有这个代码:

@EActivity
@OptionsMenu(R.menu.settings_activity_menu)
public class ActivitySettings extends Activity
{

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

       // Display the fragment as the main content.
       getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new FragSettings_())
            .commit();
   }
}



@EFragment
public class FragSettings extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener 
{
    @App
    MyApplication app;

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

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);


    }

    @AfterViews
    void init()
    {
       EditTextPreference url =(EditTextPreference)findPreference(app.getResource(R.string.CONFIG_URL_SERVER));
        EditTextPreference user =(EditTextPreference)findPreference(app.getResource(R.string.CONFIG_USER_);

        if(url!=null)
            url.setSummary(app.getSettings().getSharedPreferences().getString(app.getResource(R.string.CONFIG_URL_SERVER), ""));

        if(user!=null)
            user.setSummary(app.getSettings().getSharedPreferences().getString(app.getResource(R.string.CONFIG_USER_), ""));

    }

   @Override
   public void onResume() {
       super.onResume();
       // Register as listener to validate settings values
       app.getSettings().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
   }

   @Override
   public void onPause() {
       super.onPause();
       // Remove listener
       app.getSettings().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
   }

   @Override
   public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        EditTextPreference connectionPref = (EditTextPreference) findPreference(key);

           // Set summary to be the user-description for the selected value
           connectionPref.setSummary(app.getSettings().getSharedPreferences().getString(key, ""));
    }


}

我的 preferences.xml,在这些 editTextPreference 中我遇到了问题,输入没有出现 :

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory
    android:title="@string/settings_server">

    <EditTextPreference
        android:key="@string/CONFIG_USER_"
        android:title="@string/settings_user"/>

    <EditTextPreference
        android:inputType="textPassword"
        android:key="@string/CONFIG_PASS_"
        android:title="@string/settings_password"/>

    <EditTextPreference
        android:key="@string/CONFIG_URL_SERVER"
        android:title="@string/settings_url"/>

</PreferenceCategory>

<Preference
        android:key="@string/AREA"
        android:title="@string/settings_area"/>

</PreferenceScreen>

我真正不明白的是您的参数,但让我怀疑您是否正确地引用了这些参数到首选项。但通常,你必须用正确的对象初始化它们:

    Preference url =findPreference(Parameters.CONFIG_URL_SERVER);
    Preference user =findPreference(Parameters.CONFIG_USER_);

必须

    EditTextPreference url =(EditTextPreference)findPreference(Parameters.CONFIG_URL_SERVER);
    EditTextPreference user =(EditTextPreference)findPreference(Parameters.CONFIG_USER_);

并且最好将 xml 布局中的键设置为对 strings.xml 中字符串的引用,例如:

 <EditTextPreference
    android:key="@string/user_pref_key"
    android:title="@string/settings_user"/>

编辑

一定要使用正确的上下文。为此,您必须等到 Override onAttachActivity 附加 Activity。创建全局上下文:

  private Context mContext;

     @Override
      public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
          super.onAttach(activity);
          mContext=activity;
     }

然后你可以在你的PreferenceFragment中引用它。

  EditTextPreference url =(EditTextPreference)findPreference(mContext.getResources().getString(R.string.user_pref_key));

最后我发现发生了什么。我想使用我在所有应用程序中使用的相同文本样式,所以在 ManifestFIle.xml 中我有这个:

<activity
        android:name=".mobile.settings.ActivitySettings_"
        android:theme="@style/PreferenceActivity"
        android:label="@string/title_activity_settings"/>

指的是这种风格:

<style name="PreferenceActivity" parent="AppTheme">
    <item name="android:editTextPreferenceStyle">@style/CodeFont</item>
    <item name="android:preferenceCategoryStyle">@style/CodeFont</item>
</style>

<style name="CodeFont" parent="@android:style/TextAppearance.Medium">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">@dimen/text_size_medium</item>
</style>

似乎如果我使用 editTextPreferenceStyle 它会使框输入消失。这是我的解决方案:

<activity
        android:name=".mobile.settings.ActivitySettings_"
        android:theme="@style/AppTheme"

        android:label="@string/title_activity_settings"/>

为了自定义编辑文本,我使用了这个 http://secutyhf.org/wordpress/zeegers/2014/12/16/android-edittextpreference-style/

<style name="AppTheme" parent="android:Theme.Holo">
    <item name="android:editTextStyle">@style/EdittEXTsTYLE</item>
</style>

<style name="EdittEXTsTYLE" parent="android:Widget.EditText">

</style>