从自定义首选项获取视图

9
在我的应用程序中,我有一个PreferenceScreen,它看起来像这样:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <CheckBoxPreference
            android:key="state"
            android:title="@string/stateTitle"
            android:summary="@string/stateSummary"
            android:defaultValue="false" />

    <Preference
            android:key="test"
            android:layout="@layout/pref_control"
            android:dependency="state" />
</PreferenceScreen>

现在我的问题是如何从PreferenceActivity中获取我的pref_control.xml中的视图?我尝试使用普通的findViewById(),但最终导致了NullPointerException异常。这里是导致异常的代码:
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);

    ((Button) findViewById(R.id.startTime)).setText("bla");
    ((Button) findViewById(R.id.endTime)).setText("bla");
}
2个回答

1
你可以通过在Activity(或更好的PreferenceFragment,如果你正在使用较新版本的Android)中使用Preference p = findPrefences("test")来获取Preference对象。
在该对象上,您可以调用.getView(convertView, parent)。 对于您的目的,使用null参数调用该方法应该是可以的:findPreferences("test").getView(null, null)
希望对你有所帮助。

-1

由于您正在使用PreferenceActivity,因此可以使用以下方法:

final CheckBoxPreference stateCheckBox = (CheckBoxPreference)findPreference("state");

而且很可能是:

final Preference testPreference = (Preference)findPreference("test");

虽然它已经被弃用,但它应该可以工作。


哦,我明白了,我猜这取决于你何时使用findViewById。我本以为只要在你填充布局之后就可以了。 - David Kibblewhite
我认为你应该发布实际引起异常的代码。 - David Kibblewhite
我已经更新了我的问题并附上了代码。你认为我是否需要再次膨胀布局以使用上面的代码? - Cilenco
如果您只需要设置文本,那么请在XML中进行设置。 - David Kibblewhite
如果您需要执行更多操作,例如设置监听器,我猜您实际上需要创建一个扩展首选项的新类,覆盖其onCreateView方法,并在那里膨胀XML后使用findViewById。 - David Kibblewhite
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接