Как заменить один фрагмент другим по нажатию кнопки в Xamarin. Android? - PullRequest
0 голосов
/ 20 января 2020

Мне нужен следующий экран:

enter image description here

Когда я нажимаю кнопки IMAGE 1 и IMAGE 2, которые я хочу в IMAGE ZONE, чтобы появляются Image1.jpg и Image2.jpg соответственно. Я хочу, чтобы Image1.jpg и Image2.jpg были в разных фрагментах и ​​заменяли эти фрагменты нажатием кнопки, а не просто меняли android:src из ImageView в IMAGE ZONE при нажатии кнопки. Я хочу, чтобы Image1.jpg было первым изображением, которое появляется при открытии занятия. Я не могу найти, как это сделать с фрагментами в Xamarin.Android

1 Ответ

1 голос
/ 21 января 2020

Вы можете создать два Fragment и его xml первое.

FragmentOne :

public class Fragment1 : Android.Support.V4.App.Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        return inflater.Inflate(Resource.Layout.layoutFragment1, container, false);

        //return base.OnCreateView(inflater, container, savedInstanceState);
    }
}

и его xml:

<?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:layout_height="match_parent"
    android:id="@+id/fragment1">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/th2"/>

</LinearLayout>

FragementTwo :

public class Fragment2 : Android.Support.V4.App.Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        return inflater.Inflate(Resource.Layout.layoutFragment2, container, false);

        //return base.OnCreateView(inflater, container, savedInstanceState);
    }
}

и его xml:

<?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:layout_height="match_parent"
    android:id="@+id/fragment2">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/th2"/>

</LinearLayout>

Тогда в MainActivity вы можете установить xml следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="80dip"
        android:orientation="horizontal">

        <Button
            android:id="@+id/buttonone"
            android:layout_width="150dip"
            android:layout_height="80dip"
            android:text="FragmentOne"/>

        <Button
            android:id="@+id/buttontwo"
            android:layout_width="150dip"
            android:layout_height="80dip"
            android:text="FragmentTwo"/>

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/containerView"
        android:layout_width="match_parent"
        android:layout_height="430dip">

    </RelativeLayout> 

</LinearLayout>

Наконец, в MainActivity.cs реализовать эту функцию:

public class MainActivity : AppCompatActivity
{
    Android.Support.V4.App.Fragment fragmentOne;
    Android.Support.V4.App.Fragment fragmentTwo;
    Android.Support.V4.App.FragmentTransaction fragmentManager;
    [Obsolete]
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

        Button buttonone = FindViewById<Button>(Resource.Id.buttonone);
        buttonone.Click += Buttonone_Click;

        Button buttontwo = FindViewById<Button>(Resource.Id.buttontwo);
        buttontwo.Click += Buttontwo_Click;
        fragmentOne = new Fragment1();
        fragmentTwo = new Fragment2();

        fragmentManager = SupportFragmentManager.BeginTransaction();
        fragmentManager.Add(Resource.Id.containerView, fragmentOne);
        //adding first fragment when entering activity
        fragmentManager.Commit();
    }

    private void Buttonone_Click(object sender, System.EventArgs e)
    {
        //throw new System.NotImplementedException();
        Console.WriteLine("Buttonone_Click");
        fragmentManager = SupportFragmentManager.BeginTransaction();
        // replace to be the first fragment 
        fragmentManager.Replace(Resource.Id.containerView, fragmentOne);
        fragmentManager.Commit();
    }

    private void Buttontwo_Click(object sender, System.EventArgs e)
    {
        //throw new System.NotImplementedException();
        Console.WriteLine("Buttontwo_Click");

        fragmentManager = SupportFragmentManager.BeginTransaction();
        // replace ro be the second fragment
        fragmentManager.Replace(Resource.Id.containerView, fragmentTwo);
        fragmentManager.Commit();
    }
}

Эффект следующим образом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...