0

我在试图获取参考的 SharedPreferences 布局文件中有一个 ImageView,因此我可以在我的 PrefsActivity 类中创建一个侦听器。到目前为止,我没有任何运气使用 findViewById 获得参考,一切都返回为空。

设置如下所示:

PrefsActivity.class

public class PrefsActivity extends UnifiedSherlockPreferenceActivity {

    @Override 
    public void onCreate(Bundle savedInstanceState) {
        // Set header resource MUST BE CALLED BEFORE super.onCreate 
        setHeaderRes(R.xml.pref_headers);
        // Set desired preference file and mode (optional)
        setSharedPreferencesName("my_prefs");
        setSharedPreferencesMode(Context.MODE_PRIVATE);

        super.onCreate(savedInstanceState);
        ACRA.init(getApplication());

        getSupportActionBar().setDisplayShowCustomEnabled(true);
        getSupportActionBar().setIcon(R.drawable.new);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

pref_headers.xml

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:unified="http://schemas.android.com/apk/res-auto" >

<header
    unified:fragment="com.my.app.PrefsActivity$GeneralPreferenceFragment"
    unified:title="@string/pref_header_general"
    unified:preferenceRes="@xml/pref_general" />

pref_general.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<PreferenceCategory
android:title="Category Title"
android:layout="@layout/settings_message"

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

settings_message.xml

这包含我试图获得参考的按钮 btnTutorial

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >


<TextView
    android:id="@+id/tvSettingsMessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20px"
    android:text="@string/settings_text" />

<Button
    android:id="@+id/btnTutorial"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20px"
    android:text="@string/settings_button_text" />

4

4 回答 4

0

您在onCreate()...中缺少以下方法

setContentView(R.layout.yourlayout);

...所以返回空值。尝试实施这些更改,然后让我们知道它是否有效。

于 2013-04-10T20:40:27.723 回答
0

利用:

Preference myPreference = findPreference(key);

其中 key 是您的 XML 中的键,例如“first_name”。

于 2014-04-30T19:09:55.907 回答
0

也许您可以通过“onPreferenceTreeClick”方法访问您的 imageView,例如:

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
        Preference preference) {
    super.onPreferenceTreeClick(preferenceScreen, preference);
    if (preference != null && preference.getKey().equals("imageViewKey")) {
        // do something here
    }
    return false;
}
于 2013-04-17T17:48:53.640 回答
0

这是解决方案:

在您的 settings_message.xml 中为按钮设置属性

android:onClick="onLogoutClick"

在活动 PrefsActivity 中定义方法 public void onLogoutClick(View v) { }

你准备好了!:)

于 2013-10-07T18:25:11.103 回答