我Users在另一个 PreferenceScreen(调用它)中有一个内部 PreferenceScreen(调用它Main)。
当我点击Users一个新屏幕时,我可以在那里更改我的首选项(很多复选框)。
我想检测(触发回调)何时关闭此屏幕以及何时返回MainPreferenceScreen。
我发现的唯一方法是创建一个继承 PreferenceScreen 并重载的新类onPrepareForRemoval
我想知道是否有更简单的方法可以做到这一点。
我Users在另一个 PreferenceScreen(调用它)中有一个内部 PreferenceScreen(调用它Main)。
当我点击Users一个新屏幕时,我可以在那里更改我的首选项(很多复选框)。
我想检测(触发回调)何时关闭此屏幕以及何时返回MainPreferenceScreen。
我发现的唯一方法是创建一个继承 PreferenceScreen 并重载的新类onPrepareForRemoval
我想知道是否有更简单的方法可以做到这一点。
非常有趣的问题!我终于想通了。
诀窍是设置DialogInterface.OnCancelListener子PreferenceScreen 菜单(Users在我们的例子中是 ),您可以在其中进行设置onPreferenceTreeClick(因为这里 internalDialog已经初始化)。void onCancel(DialogInterface dialog)您一直在寻找的回调也是如此。
这是xml\preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="main">
<EditTextPreference android:title="Your Name"
android:key="username"
android:summary="Please provide your username"/>
<PreferenceScreen
android:key="users"
android:title="Users"
android:summary="Click here to select users">
<CheckBoxPreference
android:title="User 1"
android:defaultValue="false"
android:key="user1CheckBox" />
<CheckBoxPreference
android:title="User 2"
android:defaultValue="false"
android:key="user2CheckBox" />
<CheckBoxPreference
android:title="User 3"
android:defaultValue="false"
android:key="user3CheckBox" />
</PreferenceScreen>
</PreferenceScreen>
这是我用过PreferenceActivity的:PreferenceFragment
public class MyPreferencesActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
}
public static class MainPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference instanceof PreferenceScreen) {
PreferenceScreen submenu = (PreferenceScreen)preference;
submenu.getDialog().setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
Log.d("MainPreferenceFragment", "Hi! Submenu is closing now!");
}
});
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}
}
PreferenceFragmentCompat:首先,我们还需要一个 xml:(xml\subpreference.xml与 main 中的子菜单重复preference.xml):
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="users"
android:title="Users"
android:summary="Click here to select users">
<CheckBoxPreference
android:title="User 1"
android:defaultValue="false"
android:key="user1CheckBox" />
<CheckBoxPreference
android:title="User 2"
android:defaultValue="false"
android:key="user2CheckBox" />
<CheckBoxPreference
android:title="User 3"
android:defaultValue="false"
android:key="user3CheckBox" />
</android.support.v7.preference.PreferenceScreen>
然后,我们的托管活动应该implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback。最后一步 - 我们需要一个新的子片段(或传递您需要膨胀的确切 XML 作为包的参数):
public class MainActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportFragmentManager().beginTransaction().replace(R.id.container, new MainPreferenceFragment()).commit();
}
@Override
public boolean onPreferenceStartScreen(PreferenceFragmentCompat preferenceFragmentCompat,
PreferenceScreen preferenceScreen) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, new SubPreferenceFragment()).commit();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
public static class MainPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preferences);
}
}
public static class SubPreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.sub_preferences);
}
}
}
在这种情况下,你可以只听正常onBackPressed()的Activity
我希望,它有帮助