Нажимается невидимая кнопка под Fragment

В приложении есть одна активность, и фрагменты в ходе работы добавляются в один и тот же контейнер (накладываются друг на друга).

Разметка activity_main:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

Разметка layout1:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="#aa4040"
    android:layout_height="match_parent">
    <Button
        android:text="Button1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#1010aa"
        android:id="@+id/button1" />
    <Button
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#40aa40"
        android:id="@+id/button2" />
</LinearLayout>

Разметка layout2:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="#404040"
    android:layout_height="match_parent">
</LinearLayout>

Код Activity:

[Activity(Label = "@string/app_name",  MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SetContentView(Resource.Layout.activity_main);

        var transaction = FragmentManager.BeginTransaction();
        transaction.Add(Resource.Id.container, Fragment1.NewInstance());
        transaction.Commit();
    }
}

Код Fragment1:

class Fragment1 : Fragment
{
    public static Fragment1 NewInstance()
    {
        return new Fragment1();
    }
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.Inflate(Resource.Layout.layout1, container, false);

        Button button1 = view.FindViewById<Button>(Resource.Id.button1);
        button1.Click += Button1_Click;
        Button button2 = view.FindViewById<Button>(Resource.Id.button2);
        button2.Click += Button2_Click;
        return view;
    }
    private void Button2_Click(object sender, EventArgs e)
    {
        Toast.MakeText(Activity, "1234", ToastLength.Short).Show();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        var transaction = FragmentManager.BeginTransaction();
        transaction.Add(Resource.Id.container, Fragment2.NewInstance());
        transaction.Commit();
    }
}

Код Fragment2:

class Fragment2 : Fragment
{
    public static Fragment2 NewInstance()
    {
        return new Fragment2();
    }
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View view = inflater.Inflate(Resource.Layout.layout2, container, false);
        return view;
    }
}

Вопрос

  1. Запускаем приложение.
  2. Нажимаем button1, появляется новый фрагмент.
  3. Нажимаем на область, где находится button2, видим toast. Почему обрабатывается нажатие кнопки button2, когда новый фрагмент её скрывает?

Ответы (1 шт):

Автор решения: Alex_Skvortsov

Используйте замену вместо добавления:

    var transaction = FragmentManager.BeginTransaction();
    transaction.Replace(Resource.Id.container, Fragment2.NewInstance());
    transaction.Commit();
→ Ссылка