单击edittextpreference时,EditText输入不会出现

时间:2015-02-04 10:57:58

标签: android android-preferences

我正在使用editTextPreference来实现设置活动。我的问题是,当我单击EditTextPreference时,它会显示一个带有首选项标题但没有出现要编写的edittext的对话框。 我已经搜索过这个问题,但似乎并没有发生在任何人身上。任何帮助将不胜感激

我有这段代码:

@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>

2 个答案:

答案 0 :(得分:1)

最后,我发现了正在发生的事情。我想使用我在所有应用程序中使用的相同文本样式,所以在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>

答案 1 :(得分:0)

我真正不理解的是你的参数,但让我怀疑你正在给这些偏好提供正确的参考。但通常,您必须使用正确的对象初始化它们:

    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附加活动。制作全球背景:

  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));