Как передать данные из списка объектов в текстовые представления DialogFragment, основанные на выбранном элементе в виде сетки - PullRequest
0 голосов
/ 04 июня 2019

Я хочу создать приложение xamarin для Android, которое показывает изображения студентов в виде сетки, и когда я нажимаю на конкретное изображение, оно должно отображать фрагмент DialogFragment с информацией об этом конкретном студенте.

Итак, мой вопрос здесь заключается в том, как я могу получить данные конкретного студента, проанализированные в DialogFragment, когда я нажимаю на изображение студента в виде сетки?

Вот мои ученики Класс:

 class Student
{
    public int Code, Age, Image;
    public string Nom, Prenom, Adresse, Infos, Classe;

    public Student(int code, string nom, string prenom, int age, string adresse, string infos, int image, string classe)
    {
        this.Code = code;
        this.Nom = nom;
        this.Prenom = prenom;
        this.Age = age;
        this.Adresse = adresse;
        this.Infos = infos;
        this.Image = image;
        this.Classe = classe;
    }

мой класс GridviewAdapter: Чтобы Adpat Activity_image.axml к моему Gridview

class gridView_Adapter : BaseAdapter
{
    List<Student> listStudents;
    Activity a;


    public gridView_Adapter(List<Student> listStudents, Activity a)
    {
        this.a = a;
        this.listStudents = listStudents;
    }
    public override int Count => listStudents.Count;
    public override Java.Lang.Object GetItem(int position)
    {
        return position;
    }
    public override long GetItemId(int position)
    {
        return position;
    }
    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var t = listStudents[position];
        View v = convertView;
        //Creation de la vue
        v = a.LayoutInflater.Inflate(Resource.Layout.activity_image, null);
        Button Fermer = v.FindViewById<Button>(Resource.Id.button1);
        v.FindViewById<ImageView>(Resource.Id.imageView1).SetImageResource(t.Image);
        return v;
    }
}

my Fragment_info Класс:

public class fragment_Info : DialogFragment
{

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

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        List<Student> listStudents = new List<Student>();

        base.OnCreateView(inflater, container, savedInstanceState);
        View v = inflater.Inflate(Resource.Layout.layout_Eleves_Infos, container,false);
        v.FindViewById<TextView>(Resource.Id.textView6);
        v.FindViewById<TextView>(Resource.Id.textView7);
        v.FindViewById<TextView>(Resource.Id.textView8);
        v.FindViewById<TextView>(Resource.Id.textView9);
        v.FindViewById<TextView>(Resource.Id.textView10);
        v.FindViewById<ImageView>(Resource.Id.imageView1);


        //List

        listeEleves.Add(new Eleve(1, "Ahmed", "Bida", 15, "Adresse1", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
        listeEleves.Add(new Eleve(2, "Ahmed2", "Bida2", 20, "Adresse2", "infos2", Resource.Mipmap.ic_launcher, "Classe2"));
        listeEleves.Add(new Eleve(3, "Ahmed3", "Bida3", 18, "Adresse3", "infos3", Resource.Mipmap.ic_launcher_round, "Classe3"));
        listeEleves.Add(new Eleve(4, "Ahmed4", "Bida4", 17, "Adresse4", "infos4", Resource.Mipmap.ic_launcher, "Classe4"));
        listeEleves.Add(new Eleve(5, "Ahmed5", "Bida5", 15, "Adresse5", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
        listeEleves.Add(new Eleve(6, "Ahmed6", "Bida6", 20, "Adresse6", "infos6", Resource.Mipmap.ic_launcher, "Classe2"));
        listeEleves.Add(new Eleve(7, "Ahmed7", "Bida7", 18, "Adresse7", "infos7", Resource.Mipmap.ic_launcher_round, "Classe3"));
        listeEleves.Add(new Eleve(8, "Ahmed8", "Bida8", 17, "Adresse8", "infos8", Resource.Mipmap.ic_launcher, "Classe4"));


        Button Close=v.FindViewById<Button>(Resource.Id.button1);
        Close.Click += Fermer_Click;
        return v;

    }

    private void Fermer_Click(object sender, EventArgs e)
    {
        this.Dismiss();
    }
}

А это мой класс MainActivity:

    public class MainActivity : AppCompatActivity
{
    GridView gv;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);
        gv = FindViewById<GridView>(Resource.Id.gridView1);
        Search = FindViewById<Button>(Resource.Id.button1);
        classe = FindViewById<EditText>(Resource.Id.editText1);

        gv.Adapter = new gridView_Adapter(listeEleves, this);
        gv.ItemClick += Gv_ItemClick;

    }



    private void Gv_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {

        FragmentTransaction ft = FragmentManager.BeginTransaction();
        fragment_Info f1 = new fragment_Info();

        f1.Show(ft,"ok");
    }

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

Вы можете добавить студента в качестве параметра функции конструктора DialogFragment. Я создал простую демонстрацию для достижения этой функции. Вы можете проверить это здесь . Основной код выглядит следующим образом:

MainActivity.cs

  public class MainActivity : AppCompatActivity
{
    GridView gv;
    List<Student> listStudents = new List<Student>();
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);

        gv = FindViewById<GridView>(Resource.Id.gridView1);
        //Search = FindViewById<Button>(Resource.Id.button1);
        //classe = FindViewById<EditText>(Resource.Id.editText1);

        listStudents.Add(new Student(1, "Ahmed", "Bida", 15, "Adresse1", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
        listStudents.Add(new Student(2, "Ahmed2", "Bida2", 20, "Adresse2", "infos2", Resource.Mipmap.ic_launcher, "Classe2"));
        listStudents.Add(new Student(3, "Ahmed3", "Bida3", 18, "Adresse3", "infos3", Resource.Mipmap.ic_launcher_round, "Classe3"));
        listStudents.Add(new Student(4, "Ahmed4", "Bida4", 17, "Adresse4", "infos4", Resource.Mipmap.ic_launcher, "Classe4"));
        listStudents.Add(new Student(5, "Ahmed5", "Bida5", 15, "Adresse5", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
        listStudents.Add(new Student(6, "Ahmed6", "Bida6", 20, "Adresse6", "infos6", Resource.Mipmap.ic_launcher, "Classe2"));
        listStudents.Add(new Student(7, "Ahmed7", "Bida7", 18, "Adresse7", "infos7", Resource.Mipmap.ic_launcher_round, "Classe3"));
        listStudents.Add(new Student(8, "Ahmed8", "Bida8", 17, "Adresse8", "infos8", Resource.Mipmap.ic_launcher, "Classe4"));

        gv.Adapter = new gridView_Adapter(listStudents, this);
        gv.ItemClick += Gv_ItemClick;
    }

    private void Gv_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        //FragmentTransaction ft = FragmentManager.BeginTransaction();
        //fragment_Info f1 = new fragment_Info();
        //f1.Show(ft, "ok");

        int position = e.Position;
        Student student = listStudents[position];

         FragmentTransaction transcation = FragmentManager.BeginTransaction();
        MyDialog signup = new MyDialog(student);
        signup.Show(transcation, "Dialog Fragment");
    }
}

MyDialog.cs

public class MyDialog: DialogFragment
{
    Student student;

    public MyDialog(Student stu) {
        student = stu;
    }

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

        TextView text_Nom = view.FindViewById<TextView>(Resource.Id.Nom_tv);
        text_Nom.Text = "Nom: " + student.Nom;
        TextView text_Prenom = view.FindViewById<TextView>(Resource.Id.Prenom_tv);
        text_Prenom.Text = "Prenom:" + student.Prenom;

        TextView text_age = view.FindViewById<TextView>(Resource.Id.Age_tv);
        text_age.Text = "Age: " + student.Age;
        TextView text_Address = view.FindViewById<TextView>(Resource.Id.Prenom_tv);
        text_Address.Text = "Addess: " + student.Adresse;

        ImageView image_iv = view.FindViewById<ImageView>(Resource.Id.image_iv);
        image_iv.SetImageResource(student.Image);


        return view;
    }
0 голосов
/ 13 июня 2019

MainActivity.cs

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using System.Collections.Generic;
using Android.Views;
using System.Linq;
namespace CC1_V1C
{
[Activity(Label = "@string/app_name")]
public class MainActivity : AppCompatActivity
{
    List<Eleve> listeEleves;
    GridView gv;
    Button Search;
     EditText classe;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);
        listeEleves = new List<Eleve>();
        gv = FindViewById<GridView>(Resource.Id.gridView1);
        Search = FindViewById<Button>(Resource.Id.button1);
        classe = FindViewById<EditText>(Resource.Id.editText1);
        //listeEleves.Add(new Eleve(Resource.Mipmap.ic_launcher_round));
        //listeEleves.Add(new Eleve(Resource.Mipmap.ic_launcher_round));
        //listeEleves.Add(new Eleve(Resource.Mipmap.ic_launcher_round));
        //listeEleves.Add(new Eleve(Resource.Mipmap.ic_launcher_round));
        // listeEleves.Add(new Eleve( Resource.Mipmap.ic_launcher_round));

        listeEleves.Add(new Eleve(1, "Ahmed", "Bida", 15, "Adresse1", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
        listeEleves.Add(new Eleve(2, "Ahmed2", "Bida2", 20, "Adresse2", "infos2", Resource.Mipmap.ic_launcher, "Classe2"));
        listeEleves.Add(new Eleve(3, "Ahmed3", "Bida3", 18, "Adresse3", "infos3", Resource.Mipmap.ic_launcher_round, "Classe3"));
        listeEleves.Add(new Eleve(4, "Ahmed4", "Bida4", 17, "Adresse4", "infos4", Resource.Mipmap.ic_launcher, "Classe4"));
        listeEleves.Add(new Eleve(5, "Ahmed5", "Bida5", 15, "Adresse5", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
        listeEleves.Add(new Eleve(6, "Ahmed6", "Bida6", 20, "Adresse6", "infos6", Resource.Mipmap.ic_launcher, "Classe2"));
        listeEleves.Add(new Eleve(7, "Ahmed7", "Bida7", 18, "Adresse7", "infos7", Resource.Mipmap.ic_launcher_round, "Classe3"));
        listeEleves.Add(new Eleve(8, "Ahmed8", "Bida8", 17, "Adresse8", "infos8", Resource.Mipmap.ic_launcher, "Classe4"));
        gv.Adapter = new gridView_Adapter(listeEleves, this);
        gv.ItemClick += Gv_ItemClick;
        Search.Click += Search_Click;
    }

    private void Search_Click(object sender, System.EventArgs e)
    {

        //var results = listeEleves.Where(E => E.Classe == Search.Text);

       listeEleves = listeEleves.Where(E => E.Classe == classe.Text).ToList();
        gv.Adapter = new gridView_Adapter(listeEleves, this);

    }
    public override bool OnCreateOptionsMenu(IMenu menu)
    {
        return base.OnCreateOptionsMenu(menu);
    }

    private void Gv_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        var t = listeEleves[e.Position];
        FragmentTransaction ft = FragmentManager.BeginTransaction();
        fragment_Info f1 = new fragment_Info(listeEleves[e.Position]);

        f1.Show(ft,"ok");


        //View v = LayoutInflater.Inflate(Resource.Layout.layout_Eleves_Infos, null);

        //v.FindViewById<TextView>(Resource.Id.textView6).Text = t.GetCode().ToString();
        //v.FindViewById<TextView>(Resource.Id.textView7).Text = t.Nom.ToString();
        //v.FindViewById<TextView>(Resource.Id.textView8).Text = t.Prenom.ToString();
        //v.FindViewById<TextView>(Resource.Id.textView9).Text = t.GetAge().ToString();
        //v.FindViewById<TextView>(Resource.Id.textView10).Text = t.GetAdress().ToString();
        //v.FindViewById<ImageView>(Resource.Id.imageView1).SetImageResource(t.Image);
        ////Button Fermer
        //Button Fermer = v.FindViewById<Button>(Resource.Id.button1);
        ////Code button Fermer
        //Fermer.Click += Fermer_Click;

        ////Creation de alert Dialog
        //ad = new Android.App.AlertDialog.Builder(this);
        //ad.SetTitle("Stagiaire Infos");
        //ad.SetIcon(Resource.Mipmap.ic_launcher);
        //ad.SetCancelable(true);
        //ad.SetView(v);
        //ad.Show();

    }

    //private void Fermer_Click(object sender, System.EventArgs e)
    //{

    //}
}}

Fragment_info.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;

namespace CC1_V1C
{
    public class fragment_Info : DialogFragment
    {
        List<Eleve> listeEleves = new List<Eleve>();
        Eleve E;
      public fragment_Info(Eleve ee)
      {

            this.E = ee;
      }

        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);
            //List


            listeEleves.Add(new Eleve(1, "Ahmed", "Bida", 15, "Adresse1", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
            listeEleves.Add(new Eleve(2, "Ahmed2", "Bida2", 20, "Adresse2", "infos2", Resource.Mipmap.ic_launcher, "Classe2"));
            listeEleves.Add(new Eleve(3, "Ahmed3", "Bida3", 18, "Adresse3", "infos3", Resource.Mipmap.ic_launcher_round, "Classe3"));
            listeEleves.Add(new Eleve(4, "Ahmed4", "Bida4", 17, "Adresse4", "infos4", Resource.Mipmap.ic_launcher, "Classe4"));
            listeEleves.Add(new Eleve(5, "Ahmed5", "Bida5", 15, "Adresse5", "infos1", Resource.Mipmap.ic_launcher_round, "Classe1"));
            listeEleves.Add(new Eleve(6, "Ahmed6", "Bida6", 20, "Adresse6", "infos6", Resource.Mipmap.ic_launcher, "Classe2"));
            listeEleves.Add(new Eleve(7, "Ahmed7", "Bida7", 18, "Adresse7", "infos7", Resource.Mipmap.ic_launcher_round, "Classe3"));
            listeEleves.Add(new Eleve(8, "Ahmed8", "Bida8", 17, "Adresse8", "infos8", Resource.Mipmap.ic_launcher, "Classe4"));
            base.OnCreateView(inflater, container, savedInstanceState);
            View v = inflater.Inflate(Resource.Layout.layout_Eleves_Infos, container,false);
            v.FindViewById<TextView>(Resource.Id.textView6).Text = E.Code.ToString() ;
            v.FindViewById<TextView>(Resource.Id.textView7).Text = E.Nom.ToString();
            v.FindViewById<TextView>(Resource.Id.textView8).Text = E.Prenom.ToString();
            v.FindViewById<TextView>(Resource.Id.textView9).Text = E.Age.ToString();
            v.FindViewById<TextView>(Resource.Id.textView10).Text = E.Adresse.ToString();
            v.FindViewById<ImageView>(Resource.Id.imageView1).SetImageResource(E.Image);




            Button Close=v.FindViewById<Button>(Resource.Id.button1);
            Close.Click += Fermer_Click;
            return v;

        }

        private void Fermer_Click(object sender, EventArgs e)
        {
            this.Dismiss();
        }
    }
}
0 голосов
/ 04 июня 2019

Вы должны создать прослушиватель щелчков для представлений в вашем адаптере, который возвращает ученика этого представления.В вашем диалоговом конструкторе вы можете добавить ученика в качестве параметра.Таким образом, ваш фрагмент может прослушать пользователя, выбранного на адаптере, и передать его в диалог, который он создаст.

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