单击背景中的片段时返回堆栈计数增加
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()
方法替换了之前的片段视图。
我在每个片段中单击 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()
方法替换了之前的片段视图。