Android首选项-主屏幕和子屏幕

Android首选项-主屏幕和子屏幕,android,android-preferences,Android,Android Preferences,我开发了一个视频监控应用程序。 我使用首选项来保持相机设置。 在“首选项”中,我创建了带有摄像头列表的主屏幕,当用户单击当前项目时,它会打开带有摄像头名称、ip、端口等的子屏幕。 当用户输入相机设置并单击“上一步”按钮返回主屏幕时,我需要检查用户是否输入了所有必要的数据-名称、ip、端口、usr、pwd,如果其中一个参数丢失,应用程序将显示toast并发出警告 问题是,如何确定用户单击了后退按钮 在PreferenceFragment中,onBackPressed()和onKeyDown()不起

我开发了一个视频监控应用程序。 我使用首选项来保持相机设置。 在“首选项”中,我创建了带有摄像头列表的主屏幕,当用户单击当前项目时,它会打开带有摄像头名称、ip、端口等的子屏幕。 当用户输入相机设置并单击“上一步”按钮返回主屏幕时,我需要检查用户是否输入了所有必要的数据-名称、ip、端口、usr、pwd,如果其中一个参数丢失,应用程序将显示toast并发出警告

问题是,如何确定用户单击了后退按钮

在PreferenceFragment中,onBackPressed()和onKeyDown()不起作用,而且我认为在我的例子中使用这种方法是不正确的

-主屏幕

-子屏幕

我的代码:

public class MyFragments extends PreferenceFragment {
....
@Override
public void onCreate(Bundle savedInstanceState) {
root = getPreferenceManager().createPreferenceScreen(getActivity());
setPreferenceScreen(createMyPrefenceScreen());
}

private PreferenceScreen createMyPrefenceScreen() {
for (int i=1; i<=8; i++) {
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity());
screen.setKey("screen_name_" + i);
screen.setTitle("Number " + i);

ip = new EditTextPreference(getActivity());
ip.setKey("ip_" + i);
ip.setTitle("IP ");
screen.addPreference(ip);
ip.setSummary(ip.getText());
....
root.addPreference(screen);
}
return root;
}
...
} 
公共类MyFragments扩展了PreferenceFragment{
....
@凌驾
创建时的公共void(Bundle savedInstanceState){
root=getPreferenceManager().createPreferenceScreen(getActivity());
setPreferenceScreen(createMyPreferenceScreen());
}
private PreferenceScreen CreateMyPreferenceScreen(){

对于(int i=1;i您必须在活动中实现
onBackPressed
,而不是在PreferenceFragment中

以下是第二个答案:


为什么不在用户输入时进行检查?因为我需要在用户输入名称、ip、端口、用户、pwd-全套数据后进行检查。当用户按下“后退”按钮时,这意味着他完成了摄像头的配置并返回主屏幕。如果遗漏了一些参数,应用程序会显示消息。谢谢!我已经实现了您的代码。问题是,它是当我从主屏幕按back键返回到上一个活动时,此操作无效。但是,当我从子屏幕按back键返回到主屏幕时,此操作无效…我不明白你的意思…无论如何,你可能必须根据自己的情况调整代码。好)首选项子屏幕->(#按下1个后退按钮)->首选项主屏幕->(#按下2个后退按钮)->以前的活动。#1-不工作,#2-好的。我现在不知道为什么(看看
private final static String TAG_FRAGMENT = "TAG_FRAGMENT";

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.insertedDataIsCorrect()) { // HERE you can check for correct data and allow back pressed or not
        super.onBackPressed();
    }
}