【问题标题】:Programmatically changing text of a SettingsActivity widget以编程方式更改 SettingsActivity 小部件的文本
【发布时间】:2012-12-27 16:55:18
【问题描述】:

我正在开发我的第一个 Android 应用程序。 我使用向导创建了一个 SettingsActivity,到目前为止效果很好。 现在我想以编程方式更改输入字段:我正在生成一个字符串,我想在输入字段中默认预设。

这是我的输入字段,它在自动生成的 pref_general.xml 中的条目:

  <EditTextPreference
        android:capitalize="words"
        android:defaultValue="@string/pref_default_display_name"
        android:inputType="textCapWords"
        android:key="example_text"
        android:maxLines="1"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="@string/pref_title_display_name" />

我的问题是:如何在我的代码中访问此输入字段? 通常我使用

请求 UI 元素
findViewById(R.*.*);

我假设在这里我可以使用

findViewById(R.string.pref_default_display_name);

但这只会给我null!

【问题讨论】:

  • 你是否创建了一个名为pref_title_display_name的字符串资源?
  • R.java 中有这个: public static final class string { //... public static final int pref_title_display_name=0x7f050007; }
  • 这个常量对应我传递给findViewById的参数,但是这个方法还是给我null
  • 我的意思是,你在strings.xml中放了一个吗?
  • 不,该条目存在于strings_activity_set.xml中,但不存在于strings.xml中。当我在strings.xml中添加它时,编译器指出它已经被定义了

标签: android android-widget android-activity


【解决方案1】:

根据您的操作,您可以使用findPreference() 获取EditTextPreference 对象:

EditTextPreference pref = myPrefGroup.findPreference("example_text");

从这里获得View 并不容易,而且通常没有必要。您可以尝试在其上使用getView(),但这可能会或可能不会返回您想要的内容。

如果你只想设置EditTextPreference的输入值,你可以在上面使用setText(),就像使用任何EditText一样:

EditTextPreference pref = myPrefGroup.findPreference("example_text");
pref.setText("Foo!");

您可以在提供的文档中查看PreferenceEditTextPreference 还可以做什么,但有些事情不能在首选项屏幕中完成。 (这只是 Android 的限制。)

【讨论】:

  • 谢谢!你在哪里调用 findPreference(...) ?什么是 myPrefGroup?到目前为止,我只发现了不推荐使用的方法,诀窍可能是基于片段
  • 它的类型为PreferenceGroupPreferenceScreen,两者都有.findPreference() 方法。 (另外请记住,API 10 和 11 之间的首选项发生了变化,这可能会让这有点奇怪......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2018-10-18
  • 2013-01-16
  • 2014-06-07
  • 2012-02-29
  • 2017-11-23
相关资源
最近更新 更多