我Users
在另一个 PreferenceScreen(调用它)中有一个内部 PreferenceScreen(调用它Main
)。
当我点击Users
一个新屏幕时,我可以在那里更改我的首选项(很多复选框)。
我想检测(触发回调)何时关闭此屏幕以及何时返回Main
PreferenceScreen。
我发现的唯一方法是创建一个继承 PreferenceScreen 并重载的新类onPrepareForRemoval
我想知道是否有更简单的方法可以做到这一点。
我Users
在另一个 PreferenceScreen(调用它)中有一个内部 PreferenceScreen(调用它Main
)。
当我点击Users
一个新屏幕时,我可以在那里更改我的首选项(很多复选框)。
我想检测(触发回调)何时关闭此屏幕以及何时返回Main
PreferenceScreen。
我发现的唯一方法是创建一个继承 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
我希望,它有帮助