簡體   English   中英

Xamarin,itemClick上的新活動在RecyclerView中

[英]Xamarin, New activity on itemClick in RecyclerView

我正在嘗試以學習為目的的碩士和詳細信息申請。

在我的recyclerview中,當我單擊項目時,我要開始新活動並將數據發送到新活動。

我在listview示例中做到了,但是我在這里苦苦掙扎。

這是我的適配器

using Android.App;
using Android.Widget;
using Android.OS;
using System.Threading.Tasks;
using System;
using System.Threading;
using System.Collections.Generic;
using Android.Content;
using Newtonsoft.Json;
using Petrolium.DataObjects;
using Petrolium.Utilities;
using Petrolium.Activities;
using Android.Support.V7.Widget;
using Android.Views;
using static Android.Support.V7.Widget.RecyclerView;

namespace Petrolium.Adapters
{
    public class CompanyRecyclerAdapter : RecyclerView.Adapter
    {
        static List<Company> _companies = new List<Company>();
        public CompanyRecyclerAdapter(Context context, List<Company> companies) => _companies = companies;

        public override int ItemCount => _companies.Count;

        private class CompanyViewHolder : ViewHolder
        {
            public ImageView companyImageView
            {
                get;
                set;
            }

            public TextView companyNameView
            {
                get;
                set;
            }

            public CompanyViewHolder(View itemView) : base(itemView)
            {

                companyImageView = itemView.FindViewById<ImageView>(Resource.Id.company_image);
                companyNameView = itemView.FindViewById<TextView>(Resource.Id.company_name);

                itemView.Click += (sender, e) =>
                {
                    var context = itemView.Context;
                    Intent intent = new Intent(context, typeof(DetailsActivity));
                    intent.PutExtra(GetText(Resource.String.DetailsStringToJSON),
                                    JsonConvert.SerializeObject(_companies[e.Position].Fuels));

                    StartActivity(intent);
                };
            }
        }


        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            CompanyViewHolder vh = holder as CompanyViewHolder;

            vh.companyImageView.SetImageResource(Resource.Drawable.gulf);
            vh.companyNameView.Text = _companies[position].Name; 
        }

        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            View itemview = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.Company, parent, false);
            CompanyViewHolder vh = new CompanyViewHolder(itemview);

            return vh;
        }
    }
}

但是也沒有GetText方法,也有e。 沒有任何排名字段或屬性。 另外,沒有StartActivity方法可以傳遞我的意圖。

在recyclerView中進行itemClick並開始新活動的最佳實踐是什么? 如何處理這個問題?

我是android開發的初學者,對不起,如果我問簡單的事情。

您的ViewHolder應該只是將click事件傳遞給Adapter然后再傳遞給FragmentActivity來處理該事件。

public CompanyViewHolder(View itemView, Action<int> listener) : base(itemView)
{
    companyImageView = itemView.FindViewById<ImageView>(Resource.Id.company_image);
    companyNameView = itemView.FindViewById<TextView>(Resource.Id.company_name);

    itemView.Click += (sender, e) => listener (base.LayoutPosition);
}

然后在您的適配器中應該有一個事件,讓Fragment或Activity綁定到:

public class CompanyRecyclerAdapter : RecyclerView.Adapter
{
    public event EventHandler<int> ItemClick;

    void OnClick(int position)
    {
        if (ItemClick != null)
            ItemClick(this, position);
    }

    ...

    public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
    {
        View itemview = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.Company, parent, false);
        CompanyViewHolder vh = new CompanyViewHolder(itemview, OnClick);

        return vh;
    }
}

然后,最后在您的Fragment或Activity中,可以綁定到Adapter中的ItemClick事件來處理它:

mAdapter = new CompanyRecyclerAdapter(mPhotoAlbum);
mAdapter.ItemClick += OnItemClick;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM