【问题标题】:Prevent clicking on a button in an Activity while showing a Fragment防止在显示片段时单击 Activity 中的按钮
【发布时间】:2015-03-02 20:31:08
【问题描述】:

ActivityFragment 之间的交互有问题。

我有一个 main Activity 和一个 into Activity 带有布局按钮和文本输入。当我在mainActivity 中打开Fragment 时,我仍然可以单击Activity 中的按钮并再次打开Fragment,或者在文本输入中输入文本.

我已经找了两个小时的帮助,还没有找到答案!

这就是我从Activity 打开Fragment 的方式:

FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            SignUp fragment = new SignUp();
            fragmentTransaction.add(R.id.fragment_content, fragment);
            fragmentTransaction.commit();

这是图片: picture

【问题讨论】:

  • 一旦单击按钮并添加片段,只需从按钮中删除监听器(如果我明白你在说什么)
  • 好的,但是如何处理输入字段?我可以从片段中将文本输入到活动布局的输入字段中。
  • 根据您提供的信息,您的问题并不是很清楚。您的图片并没有真正显示任何内容,您的代码只是说您正在向活动添加片段。如果您不希望在构建片段时您的字段可编辑/可聚焦,只需删除所有事件侦听器。
  • 这个答案解释了如何禁用输入字段:stackoverflow.com/a/8942552/916451
  • 可以使用setEnabled(boolean) 方法禁用按钮。

标签: android fragment


【解决方案1】:

我也遇到过同样的问题,并搜索了几个小时以找到解决方案或原因,我找到了。

当您将片段添加到活动时,片段和活动的功能将响应屏幕上的触摸。

如果您想通过片段进行触摸,只需在片段的 onViewCreated 函数中创建一个空的 setOnTouchListener 即可。

Java 代码

@Override
protected void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(v, savedInstanceState);
    view.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            return true;
        }
    });
}

Kotlin 中的代码

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    view!!.setOnTouchListener { view, motionEvent -> return@setOnTouchListener true }
}

【讨论】:

    【解决方案2】:

    谢谢大家。我找到了像 jjm 这样的解决方案:

    “使用两个片段可能更有效,一个带有当前在活动中的控件,另一个是您当前拥有的片段。第一个片段中的按钮可以告诉活动显示第二个。”

    我只是用活动组件创建新片段并替换片段。 但是我还是不明白为什么我们可以通过片段布局点击活动布局上的按钮?为什么有用?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多