【问题标题】:EditText input doesn't appear when I click in an edittextpreference当我单击 edittextpreference 时,没有出现 EditText 输入
【发布时间】:2015-02-04 10:57:58
【问题描述】:

我正在使用 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>

【问题讨论】:

  • 您确定 Parameters.CONFIG_URL_SERVER 和 Parameters.CONFIG_USER_ 为您提供了正确的密钥吗?
  • 是的,我尝试使用 R.string 进行更改,但对话框仍然没有显示输入框

标签: android android-preferences


【解决方案1】:

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

    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"/>

编辑

请务必使用正确的上下文。为此,您必须等到 Activity 被 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));

【讨论】:

  • 我尝试了你的建议,但我仍然有问题。当我打开对话框时出现该问题。
  • 也许这是一个上下文问题。我不知道您对“MyApplication”应用程序做了什么。但是要引用上下文,您最好像我的编辑那样做。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2020-05-26
    相关资源
    最近更新 更多