Comment remplir une vue de liste dans xamarin android c# à l'aide de l'API REST, vue de liste personnalisée, adaptateur, disposition des lignes

james.d_12

J'ai une connaissance très limitée de la programmation en général. Essayer de créer une vue de liste personnalisée pour afficher une image et un message principalement.

J'ai essayé de suivre des tutoriels sur la façon de le faire et je n'arrive pas à trouver comment le faire fonctionner.

ont actuellement ces erreurs et n'ont aucune idée de comment corriger:

[![erreur d'écran msgInbox][1]][1]

Voici l'activité msgInbox avec la liste :

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

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Dribl;
using Newtonsoft.Json;

namespace Dribl.Droid
{
    [Activity(Label = "MsgInbox", Theme = "@style/CustomActionBarTheme")]
    public class MsgInbox : Activity
    {

        TextView txt;

        //Button backBtn;

        private List<Message> msgItems;

        private ListView msgListview;

        //private BaseAdapter<msgInfo> mAdapter;

        //action bar layout buttons
        LinearLayout surveysBtn;


        LinearLayout availabilityBtn;


        LinearLayout inboxBtn;


        LinearLayout dashboardBtn;




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

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.msgInbox);
            //add the action bar to the layout 
            ActionBar.SetCustomView(Resource.Layout.action_bar);
            ActionBar.SetDisplayShowCustomEnabled(true);



            //actionbar layout btns
            //actionbar layout btns
            surveysBtn = FindViewById<LinearLayout>(Resource.Id.SurveyLayout);
            surveysBtn.Click += surveyBtn_Click;

            inboxBtn = FindViewById<LinearLayout>(Resource.Id.InboxLayout);
            inboxBtn.Click += InboxBtn_Click;


            availabilityBtn = FindViewById<LinearLayout>(Resource.Id.availabilityLayout);
            availabilityBtn.Click += availabilityBtn_Click;

            dashboardBtn = FindViewById<LinearLayout>(Resource.Id.dashboardLayout);
            dashboardBtn.Click += dashboardBtn_Click;


            txt = FindViewById<TextView>(Resource.Id.msg_txt);


            WebClient client = new WebClient();
            System.Uri uri = new System.Uri("http://dribl.com/api/getAllMyMessages");
            NameValueCollection parameters = new NameValueCollection();


            parameters.Add("token", GlobalVariables.token);

            client.UploadValuesAsync(uri, parameters);
            client.UploadValuesCompleted += client_UploadValuesCompleted;

            //listview
            msgListview = FindViewById<ListView>(Resource.Id.msgListView);
            msgListview.ItemClick += MsgListview_ItemClick;


        }

        private void MsgListview_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            Intent intent = new Intent(this, typeof(msgDetails));

            //add in a variable to store the message that was clicked on and pass across to next pages txtfield
            intent.PutExtra("msgDet", "This is a message");
            StartActivity(intent);
        }

        protected internal void client_UploadValuesCompleted(object sender, UploadValuesCompletedEventArgs e)
        {
            string json = Encoding.UTF8.GetString(e.Result);
            List<Message> messages = JsonConvert.DeserializeObject<List<Message>>(json);

            //display the retrieved msg in the console output
            //Console.WriteLine(message[1].message + " is the message");

            //display the msg in a text view at top of page
            //txt.Text = message[1].message;


            //get the list view create a string to store and add to the list view based on the json return

            // msgItems = new List<Message>();

            // for (int c = 0; c < message.Count; c++)
            // {

            //     msgItems.Add(message[c].message);
            //msgItems.Add(new Message() { message = "pauls hectic"});
            //}

            msgItems = messages;

           // msgAdapter msgAdapter = new msgAdapter(this, msgItems);
            //msgListview.Adapter = msgAdapter;


            //Msgs.Add(message[1].message);
            //Msgs.Add(message[0].message);

           // ArrayAdapter<Message> adapter = new ArrayAdapter<Message>(this, Android.Resource.Layout.SimpleListItem1, msgItems);
            //msgListview.Adapter = adapter;
           // msgAdapter msgAdapter = new MsgAdapter(this, message);
            //var msgAdapter = new MsgAdapter(this, message);
            MsgAdapter msgAdapter = new MsgAdapter(this, messages);
        }


        void surveyBtn_Click(object sender, EventArgs e)
        {
            Intent intent = new Intent(this, typeof(Surveys));
            this.StartActivity(intent);
            this.Finish();
        }

        void dashboardBtn_Click(object sender, EventArgs e)
        {
            Intent intent = new Intent(this, typeof(dashboard));
            this.StartActivity(intent);
            this.Finish();
        }

        void availabilityBtn_Click(object sender, EventArgs e)
        {
            Intent intent = new Intent(this, typeof(Availability));
            this.StartActivity(intent);
            this.Finish();
        }

        void InboxBtn_Click(object sender, EventArgs e)
        {
            Intent intent = new Intent(this, typeof(MsgInbox));
            this.StartActivity(intent);
            this.Finish();
        }





    }


}

Voici la classe msgInfo :

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.Views;
using Android.Widget;

namespace Dribl.Droid
{

            public class Message
        {

            public string messages { get; set; }


    }

}

C'est l'adaptateur msg :

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.Views;
using Android.Widget;

namespace Dribl.Droid
{


    class MsgAdapter : BaseAdapter<Message>
    {
        private List<Message> msgItems;
        private Context msgContext;

        public MsgAdapter(Context Context, List<Message> Items)
        {
            msgItems = Items;
            msgContext = Context;
        }
        public override int Count
        {
            get { return msgItems.Count; }
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override Message this[int position]
        {
            get { return msgItems[position]; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View row = convertView;

            if (row == null)
            {
                row = LayoutInflater.From(msgContext).Inflate(Resource.Layout.msgCell, parent, false);
            }


            TextView message = row.FindViewById<TextView>(Resource.Id.message);
            message.Text = msgItems[position].messages;

            return row;
        }
    }
}
hache de pin
List<Message> message = JsonConvert.DeserializeObject<List<Message>>(json);

message est déjà une liste de messages List<Message>, vous n'avez donc pas besoin d'en créer un nouveau. Il suffit de passer cet objet au constructeur de l'adaptateur.

Vous pouvez supprimer cette partie :

       msgItems = new List<Message>();

        for (int c = 0; c < message.Count; c++)
        {
            msgItems.Add(message[c].message);
        }

Mais au cas où vous voudriez conserver la liste des messages, il vous suffit de :

msgItems = messages;

Ensuite, créez votre objet adaptateur :

msgAdapter adapter = new msgAdapter(this, message);

ou tu peux aussi

var adapter = new msgAdapter(this, message);

et ajoutez l'adaptateur :

msgListview.Adapter = adapter;

Remarques:

Remplacez la variable de message par messages car elle contient plus d'un message.

msgAdapter changez le nom en MsgAdapter (première lettre en majuscule) de cette façon, vous n'aurez aucun problème à savoir quand c'est la classe et quand c'est l'objet.

METTRE À JOUR:

Vous avez une erreur dans la GetViewméthode de votre adaptateur.

Vous devez indiquer le parent lors du gonflage du rang :

row = LayoutInflater.From(msgContext).Inflate(Resource.Layout.msgCell, parent, false);

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Exporter la table de l'arborescence vers CSV avec mise en forme

  3. 3

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  4. 4

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  9. 9

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  10. 10

    php ajouter et fusionner des données de deux tables

  11. 11

    Créer un système Buzzer à l'aide de python

  12. 12

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  13. 13

    Comment changer la couleur de la police dans R?

  14. 14

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  15. 15

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    comment afficher un bouton au-dessus d'un autre élément ?

  18. 18

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  19. 19

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  20. 20

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  21. 21

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

chaudétiquette

Archive