单击背景中的片段时返回堆栈计数增加

Back Stack count increasing when clicked on fragment in background

我在每个片段中单击 textView 时添加下一个片段。

我的流程是 MainActivity => 片段 A => 片段 B => 片段 C => 片段 D

但每次我点击 Fragment D 中的 textView 时,Fragment D 都会被添加,返回堆栈计数也会增加。 我在 Fragment D 中没有任何点击侦听器。那么为什么会这样呢?

这是我的 MainActivity =>

    buttonAddFragment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AFragment fragment = new AFragment();
            addFragment(fragment, "MainActivity");
        }
    });


public void addFragment(Fragment fragment, String callingFrom) {
    Log.e("Call =>", callingFrom);
    fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.fragmentContainer, fragment, "demoFragment");
    fragmentTransaction.addToBackStack("tag");
    fragmentTransaction.commit();
}

片段 A =>

    mTextViewClick = view.findViewById(R.id.mTextViewClick);
    mTextViewClick.setText("A Fragment");
    mTextViewClick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            BFragment fragment=new BFragment();
            ((MainActivity)getActivity()).addFragment(fragment,"Fragment A");
        }
    });

所有片段都具有与片段 A 相同的代码

这里发生的实际上是点击片段 C,因为在片段 D 的视图上没有声明触摸消费者,并且由于您使用的是 FragmentTransaction.add() 函数,因此前一个片段视图不会被破坏或替换为新片段。

因此,要解决此问题,您只需将这些属性添加到片段 D 的根视图即可:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:focusable="true"
    android:clickable="true"
    android:focusableInTouchMode="true">
    ....
</RelativeLayout>

或者确保您已经使用 FragmentTransaction.replace() 方法替换了之前的片段视图。