在 Main activity 中覆盖片段时输入无法按预期工作

Input Doesn't Work as Expected When Overlaying a Fragment in Main activity

所以我使用这段代码在我所有的视图上覆盖了一个片段。

statusList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Fragment fragment = new DetailedInformerFragment();

            FragmentManager fm = getActivity().getSupportFragmentManager();
            FragmentTransaction transaction = fm.beginTransaction();
            transaction.add(android.R.id.content,fragment);
            transaction.commit();
        }
    });

片段被覆盖,但当我开始触摸屏幕时,它穿过片段。例如,主 activity 中有一个文本框。当我将片段覆盖在主 activity 上时,我触摸了文本框所在的位置,即使我没有看到它并且我不应该看到它,键盘也会弹出。

我的问题是如何防止用户输入除片段之外的其他视图,片段是用户唯一可以看到的内容。

而不是使用,

transaction.add(android.R.id.content, fragment);

尝试使用,

transaction.replace(android.R.id.content, fragment);

因为您在其他内容之上添加了一个片段,所以它们基本上都在那里,这就是您的界面变得混乱的原因。通过使用替换,您可以用新片段替换任何现有片段,这样它们就不会同时存在于界面上。

A FrameLayout 可能是片段容器的最佳实践,因为 FrameLayout 将只允许一个子元素,从而强制执行不允许多个 fragments/layouts 进入的行为同样UIspace.

进一步阅读: