In meinem MainActivity
gibt es eine FrameLayout
(id = fragment_container), die durch die Aktivität in onCreate
mit FragmentA
ersetzt wird. FragmentA
enthält nur eine einzelne Schaltfläche und ruft onClick in MainActivity
auf, um die FrameLayout
durch FragmentB
zu ersetzen. FragmentB
enthält eine RecyclerView und wird korrekt angezeigt. Ich rufe fragmentManager.popBackStack()
an, um FragmentA
zurückzubringen. Jetzt wird FragmentA
über FragmentB
angezeigt (mit dem ich noch interagieren kann).Fragment immer noch sichtbar nach popBackStack
Warum wird FragmentB
nicht nach dem Aufruf entfernt?
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private FragmentManager fragmentManager;
@Override
public void onBackPressed() {
fragmentManager.popBackStack();
}
@Override
public void onClick(View view) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new FragmentB());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//...
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FragmentA fragment = FragmentA.getInstance(this); //register OnClickListener
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
//...
}
fragmenta
public class FragmentA extends Fragment {
private View.OnClickListener onClickListener;
public FragmentA() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a, container, false);
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);
fab.setOnClickListener(onClickListener);
return view;
}
public static FragmentA getInstance(View.OnClickListener onClickListener) {
FragmentA fragmentA = new FragmentA();
fragmentA.setOnClickListener(onClickListener);
return fragmentA;
}
private void setOnClickListener(View.OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
}
FragmentB
public class FragmentB extends Fragment {
//...
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.FragmentB, container, true);
//manipulating Views...
//...
return view;
}
}
Fügen Sie dem Fragment A eine Hintergrundfarbe hinzu. – JpCrow
@JpCrow wäre das nicht ein dreckiger Workaround? –
Wenn Sie es vorziehen, können Sie es in das Thema Ihrer Aktivität hinzufügen, dann überprüfen Sie mit den Entwicklern Tools die Überziehung des Fragments – JpCrow