Xamarin Передача EditText от фрагментов к фрагментам - PullRequest
0 голосов
/ 27 февраля 2020

Я получил фрагмент с именем Rating.cs, в котором rating.cs находится searchText. Теперь я пытаюсь получить searchText.text и передать его следующему фрагменту, где этот searchText является условием сортировки. Вот мой код

Rating.cs

using System;
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.OS;
using Android.Support.Design.Widget;
using Android.Text;
using Android.Views;
using Android.Widget;
using PediburRatingApp;
using PediburRatingApp.Adapter;
using PediburRatingApp.DataModels;
using PediburRatingApp.Fragments;

namespace PediburRatingApp.Activity
{

    public class Rating : Fragment
    {
        Button submit_button;
        public EditText searchText;

        List<Drivers> DriversList;

        View view;
        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.YourFragment, container, false);


            view = inflater.Inflate(Resource.Layout.rating, container, false);
            submit_button = (Button)view.FindViewById(Resource.Id.submit_rating);
            searchText = (EditText)view.FindViewById(Resource.Id.searchText);


            submit_button.Click += SubmitButton_Click;

            return view;
        }


        Fragment fragment;
        private void SubmitButton_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(searchText.Text))
            {
                Snackbar snackBar = Snackbar.Make(view, "Please Enter A Value ", Snackbar.LengthShort);
                snackBar.Show();
            }
            else
            {

                FragmentTransaction transaction = this.FragmentManager.BeginTransaction();

                fragment = new DriversListFrag();

                 transaction.Replace(Resource.Id.FramePage, fragment);
                transaction.Commit();

            }


        }



    }
}

DriversListFrag

using System;
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.OS;
using Android.Support.Design.Widget;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using PediburRatingApp;
using PediburRatingApp.Activity;
using PediburRatingApp.Adapter;
using PediburRatingApp.DataModels;
using PediburRatingApp.EventListener;
using PediburRatingApp.Fragments;

namespace PediburRatingApp.Fragments
{

    public class DriversListFrag : Fragment
    {
        View view;
        RecyclerView myRecyclerView;
        List<Drivers> DriversList;
        DriversAdapter adapter;
        DriversListener driversListener;
        EditText Rating.searchText;



        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);


        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            view = inflater.Inflate(Resource.Layout.DriversList, container, false);

            myRecyclerView = (RecyclerView)view.FindViewById(Resource.Id.myRecyclerView);

           RetrievedData();
            //CreateData();
            //SetUpRecyClerView();
            return view;
        }
        private void SetUpRecyClerView()
        {
            myRecyclerView.SetLayoutManager(new Android.Support.V7.Widget.LinearLayoutManager(myRecyclerView.Context));
            adapter = new DriversAdapter(DriversList);
            myRecyclerView.SetAdapter(adapter);
        }
        public void CreateData()
        {
            DriversList = new List<Drivers>();
            DriversList.Add(new Drivers { Name = "Test", Location ="Test", BodyNum = "1056" });
            DriversList.Add(new Drivers { Name = "Test", Location ="Test",BodyNum = "1056", });

        }
        public void RetrievedData()
        {
            driversListener = new DriversListener();
            driversListener.Create();
            driversListener.DriversRetrieved += DriversListener_DriversRetrieved;
        }

        private void DriversListener_DriversRetrieved(object sender, DriversListener.DriversDataEventArgs e)
        {
             List<Drivers> SearchResult =
                (from drivers in DriversList
                 where drivers.BodyNum.Contains(searchText.Text.ToLower())
                 select drivers).ToList();
            DriversList = e.Drivers;
            SetUpRecyClerView();
        }
    }
}

Я хочу добавить его в Driverlistfrag as searchText Есть ли более простой способ сделать это?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Пожалуйста, go по приведенной ниже ссылке может быть полезно для вас:

Как передавать данные между фрагментами в Xamarin?

Спасибо

1 голос
/ 28 февраля 2020

Я изменяю ваш код, пожалуйста, посмотрите:

В Rating.cs:

 private void SubmitButton_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(searchText.Text))
        {
            Snackbar snackBar = Snackbar.Make(view, "Please Enter A Value ", Snackbar.LengthShort);
            snackBar.Show();
        }
        else
        {

            FragmentTransaction transaction = this.FragmentManager.BeginTransaction();

            fragment = new DriversListFrag();

            Bundle bundle = new Bundle();
            bundle.PutString("message", searchText.Text.ToString());
            fragment.Arguments = bundle;

             transaction.Replace(Resource.Id.FramePage, fragment);
            transaction.Commit();

        }
    }

В DriversListFrag.cs:

 private void DriversListener_DriversRetrieved(object sender, DriversListener.DriversDataEventArgs e)
    {
         List<Drivers> SearchResult =
            (from drivers in DriversList
             where drivers.BodyNum.Contains(Arguments.GetString("message").ToLower())
             select drivers).ToList();
        DriversList = e.Drivers;
        SetUpRecyClerView();
    }
...