Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在后台单击片段时,后堆栈计数增加_Android_Android Fragments_Fragment Backstack - Fatal编程技术网

Android 在后台单击片段时,后堆栈计数增加

Android 在后台单击片段时,后堆栈计数增加,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,在每个片段中单击textView时,我正在添加下一个片段 我的流量是 MainActivity=>片段A=>片段B=>片段C=>片段D 但每次我点击片段D中的textView,片段D就会被添加,并且回栈计数会增加。 我在片段D中没有任何单击侦听器。那么为什么会发生这种情况呢 这是我的主要活动=> buttonAddFragment.setOnClickListener(new View.OnClickListener() { @Override publi

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

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

但每次我点击片段D中的textView,片段D就会被添加,并且回栈计数会增加。 我在片段D中没有任何单击侦听器。那么为什么会发生这种情况呢

这是我的主要活动=>

    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()
方法替换了以前的片段视图。

尝试这个答案我已经尝试过了,但它对我不起作用