在PreferenceActivity创建的布局中获取Button的引用

时间:2013-04-10 20:21:34

标签: java android

我在SharedPreferences布局文件中有一个ImageView我正在尝试获取引用,所以我可以在我的PrefsActivity类中创建一个监听器。到目前为止,我没有运气使用findViewById获取引用,所有内容都返回为null。

设置如下:

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 个答案:

答案 0 :(得分:0)

您在onCreate() ...

中缺少以下方法
setContentView(R.layout.yourlayout);

...因此返回空值。尝试实施这些更改,然后告诉我们它是否有效。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

以下是解决方案:

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

机器人:的onClick = “onLogoutClick”

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

你准备好了! :)

答案 3 :(得分:0)

使用:

Preference myPreference = findPreference(key);

其中key是XML中的键,例如&#34; first_name&#34;。