次の設定フラグメント xml があります。
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceScreen
android:order="1"
android:summary="Sound settings"
android:title="Sound"
android:widgetLayout="@layout/preference_switch_sound" >
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.test.SoundPreferencesActivity"
android:targetPackage="com.test" />
</PreferenceScreen>
</PreferenceScreen>
そして、私が上で指している私のサウンドスイッチwidgetLayout:
<?xml version="1.0" encoding="utf-8"?>
<Switch xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/soundSwitchWidget"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="16dip"
android:focusable="false"
android:clickable="true" />
私の問題は、onClickListener をアタッチできるように、コードでスイッチを取得する必要があることです。
Preference Activity でビューを見つけようとしました:
public class PublicPreferencesActivity extends PreferenceActivity {
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, preference).commit();
Switch s = (Switch) findViewById(R.id.soundSwitchWidget);
// I always get null here
}
}
私も自分のフラグメントで試しました:
public static class PublicPreferenceFragment extends PreferenceFragmentSummary {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.publicpreferences);
Switch s = (Switch) findViewById(R.id.soundSwitchWidget);
// switch is null here too
}
}
設定画面に配置したスイッチにプログラムでアクセスするにはどうすればよいですか?
編集: SwitchPreference を使用していない理由について質問がありました。基本的に、スイッチでサウンドのオン/オフを切り替えられるようにしたいだけでなく、設定 (スイッチではなくタイトル) をクリックすると新しい PreferenceScreen に切り替えられるようにしたいと考えています。SwitchPreference を使用しようとしましたが、テキストをクリックすると、スイッチが切り替わり、単に PreferenceScreen に送信されるのではなく、PreferenceScreen に送信されます。
メイン設定でwifiの動作を模倣しようとしています。IE では、トップ レベルからスイッチをオン/オフできますが、テキストをクリックしてより詳細な画面にアクセスすることもできます。