Preferenceに追加したLayout(Button等)の取得

2,239 views
Skip to first unread message

Tomo Kaneda

unread,
Mar 4, 2012, 3:50:31 AM3/4/12
to 日本Androidの会
初めての投稿が、質問となり申し訳ないですが
ひとつお力をお借りできれば幸いです。

現在android2.1にてアプリの設定画面を作成しており
設定画面で追加したボタン等の入力が取得できなくて困っております。
詳細は以下となります。

PreferenceActivity クラスの
addPreferencesFromResource 関数に設定するための
setting.xml にて PreferenceScreen を記述しているのですが。

PreferenceScreen の要素にはボタンのみやシークバーなどの要素はないため
Preference にてレイアウト設定しております。

//== setting.xml ここから==================================

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings"
android:background="#000000">

<Preference
android:key="@string/setting_button_hoge"
android:layout="@layout/button_hoge"
android:title="hoge"
/>

</PreferenceScreen>

//== setting.xml ここまで==================================

Preference に追加したレイアウトファイルは以下になります。

//== button_hoge.xml ここから==============================

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/button_text"
android:textSize="20sp">
</Button>

//== button_hoge.xml ここまで==============================

この場合に @id/button_layout が押されたかどうかなどを取得したいのですが
上手くレイアウトを取得することができません。

//== MyPreferenceActivity.java ここから=======================

public class MyPreferenceActivity extends PreferenceActivity
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);

// Preference自体は取得できる
Preference a_prefe =
findPreference(getString(R.string.setting_button_hoge));

// Buttonは取得できない(null)となる
Button a_button = (Button)findViewById(R.id.button_layout);
}

//== MyPreferenceActivity.java ここまで=======================

なにか考え違いをしていると思うのですが
ご教授願えれば助かります。

以上

noxi

unread,
Mar 4, 2012, 6:01:50 AM3/4/12
to android-g...@googlegroups.com
noxiです。

やりたいことは
・各Preference上にCheckBoxPreferenceの様にウィジェットを表示する
・PreferenceActivityにウィジェットを追加する
のどちらでしょうか?

前者であればPreferenceを継承したクラスを作成しPreference#onBindViewで設定したViewを取得することができます。
http://goo.gl/xadIr

後者では通常Activityの様にレイアウトxmlを作成しsetContentViewで
PreferenceActivityが表示するViewを事前に変更します。
http://d.hatena.ne.jp/lagos_on/20110224/1298576060

Android 3.0以降でpreference-header・PreferenceFragmentを利用する場合
後者の様にsetContentViewを呼ぶと動作しない可能性が高いのでお勧め出来ません。


2012年3月4日17:50 Tomo Kaneda <shin...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>

Reply all
Reply to author
Forward
0 new messages