3

次の設定フラグメント 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 では、トップ レベルからスイッチをオン/オフできますが、テキストをクリックしてより詳細な画面にアクセスすることもできます。

4

2 に答える 2

-1

Fragment の onCreate() 関数は、View を作成してはなりません (これは、すべてのタイプのフラグメントに当てはまります)。

必要に関係なく、PreferenceFragment のビューにアクセスするには、onCreateView() をオーバーライドする必要があります。環境設定 ListView パディングの削除の例を参照してください。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = super.onCreateView(inflater, container, savedInstanceState);

    if (null != view) {
        ListView lv = (ListView) view.findViewById(android.R.id.list);
        if (null != lv)
            lv.setPadding(0, 0, 0, 0);
    }

    return view;
}
于 2015-10-23T19:06:08.283 に答える