我开发了一款视频监控应用。 我使用首选项来保持相机设置。 在首选项中,我创建了带有摄像机列表的主屏幕,当用户点击当前项目时,它会打开带有摄像机名称,ip,端口等的子屏幕。 当用户输入相机设置并单击后退按钮返回主屏幕时,我需要检查用户是否输入了所有必要的数据 - 名称,IP,端口,usr,pwd,如果其中一个参数丢失,应用程序将显示警告的吐司。
问题是,如何确定用户点击后退按钮?
在PreferenceFragment中,onBackPressed()和onKeyDown()不起作用,而且我认为它不正确在我的情况下使用这种方法...
http://4pda.ru/forum/dl/post/5659206/Screen-Main.gif - 主屏幕
http://4pda.ru/forum/dl/post/5659204/Screen-Sub.gif - 子屏幕
我的代码:
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;
}
...
}
答案 0 :(得分:0)
您必须在Activity中实现onBackPressed
,而不是在PreferenceFragment中。
在给this question的第二个答案之后:
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();
}
}