从活动切换到嵌套的PreferenceScreen

3

如何从活动中打开到特定首选项的嵌套PreferenceScreen(例如通过意图)?

示例:

<PreferenceScreen

 ...
<!-- opens a subscreen of settings -->
<PreferenceScreen
    android:key="sub_menu_key"
    android:persistent="false"
    android:title="Submenu">

    ...

    <PreferenceCategory
        android:key="category_key"
        android:title="Category">
     ...

        <Preference
            android:key="tos_key"
            android:title="Terms of Service" />
     ...
    </PreferenceCategory>
</PreferenceScreen>
...

有没有一种方式可以直接打开“服务条款”可见的位置?

2个回答

0
你只需要在你的onResume()方法中声明指定的Preference类即可。在我的例子中,我使用了SwitchPreference类,因此代码应该像这样 - SettingsActivity.class
public static class PrivacyPreferenceFragment extends PreferenceFragment {
    public SwitchPreference switchPreference;

    @Override
    public void onResume() {
        super.onResume();
        switchPreference = (SwitchPreference) findPreference("privacy_notice_check");
    }

   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref_privacy);
        setHasOptionsMenu(true);

    }
}

然后在您想要使用PreferenceFragment值的活动中,只需使用SharedPreference对象调用值并触发它。

如果您需要SharedPreference逻辑,请在下面评论。


我在这个偏好设置活动上工作,如果switchprefence被设置为ON,则向人们显示隐私通知,否则如果设置为off,则不显示通知。 - Prajwal Waingankar

-1

从一个活动(例如:主活动)中,您可以使用显式意图

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

Button goToPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    goToPreference = (Button) findViewById(R.id.goToButton);
    goToPreference.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // when you click go to Preference
            Intent intent = new Intent( MainActivity.this, UserSettingsActivity.class);
            startActivity(intent);
        }
    });
}
}

布局:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="it.uniba.di.ivu.di.sms16.gruppox.examplesettings.MainActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Go To Preference"
    android:id="@+id/goToButton"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

</RelativeLayout>

UserSettingsActivity 是一个继承自 PreferenceActivity 的活动,允许您查看偏好设置。

import android.content.SharedPreferences; 
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.os.Bundle;

public class UserSettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.settings);
    PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

    if(key.equals("lenguage_preference"))
    {
         // TO DO
    }
}

@Override
protected void onResume() {
    super.onResume();
    getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    super.onPause();
}
}

settings.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory
    android:title="Lenguage">

    <ListPreference
        android:key="lenguage_preference"
        android:title="Change Lenguage"
        android:summary="Choose yout language"
        android:entries="@array/entries_list_preference2"
        android:entryValues="@array/entryvalues_list_preference2"
        android:dialogTitle="choose favourite language" />

</PreferenceCategory>

<PreferenceCategory
    android:title="Distance">

    <ListPreference
        android:key="distance_preference"
        android:title="Distance"
        android:summary="Change distance"
        android:entries="@array/entries_list_preference"
        android:entryValues="@array/entryvalues_list_preference"
        android:dialogTitle="choose favourite distance" />

</PreferenceCategory>

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="entries_list_preference"
    translatable="false">

    <item>2 (km)</item>
    <item>1 (km)</item>
    <item>500 (m)</item>
    <item>200 (m)</item>

</string-array>

<string-array name="entryvalues_list_preference"
    translatable="false">
    <item>2000</item>
    <item>1000</item>
    <item>500</item>
    <item>200</item>
</string-array>

<string-array name="entries_list_preference2"
    translatable="false">
    <item>Italian</item>
    <item>English</item>
    <item>French</item>

</string-array>

<string-array name="entryvalues_list_preference2"
    translatable="false">
    <item>it</item>
    <item>en</item>
    <item>fr</item>

</string-array>

有没有一种方法可以直接打开“服务条款”?
我认为您可以参考如何以编程方式打开或模拟单击Android首选项(使用XML创建)?

直接转到“服务条款”,我指的是转到您将看到该首选项的视图。直接移动到PreferenceScreen子菜单。但感谢您的建议,我也会研究一下这个。 - NappyXIII

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接