Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RecyclerView Xamarin Android中,一次点击按钮即可显示一些弹出菜单_C#_Xamarin.android_Android Recyclerview_Popupmenu - Fatal编程技术网

C# 在RecyclerView Xamarin Android中,一次点击按钮即可显示一些弹出菜单

C# 在RecyclerView Xamarin Android中,一次点击按钮即可显示一些弹出菜单,c#,xamarin.android,android-recyclerview,popupmenu,C#,Xamarin.android,Android Recyclerview,Popupmenu,我无法显示弹出菜单。当我点击ImageButton时,显示屏上显示了几个弹出菜单(对于不同的元素-在ClickedPopUpMenu的click listener中,我显示了带位置的toast) 使用系统; 使用System.Collections.Generic; 利用制度全球化; 使用System.Linq; 使用System.Text.RegularExpressions; 使用Android.App; 使用Android.Support.V7.Widget; 使用Android.View

我无法显示弹出菜单。当我点击ImageButton时,显示屏上显示了几个弹出菜单(对于不同的元素-在ClickedPopUpMenu的click listener中,我显示了带位置的toast)

使用系统;
使用System.Collections.Generic;
利用制度全球化;
使用System.Linq;
使用System.Text.RegularExpressions;
使用Android.App;
使用Android.Support.V7.Widget;
使用Android.Views;
使用Android.Widget;
使用DexpensMobile.Core.Models;
使用DexpensMobile.Core.Services;
使用DexpensMobile.Core.Services.AuthService;
使用Dexpensomobile.Droid.Screens;
使用UniversalImageLoader.Core;
使用UniversalImageLoader.Core.Display;
使用PopupMenu=Android.Widget.PopupMenu;
命名空间DexpensMobile.Droid.Adapters
{
公共类PostListAdapter:RecyclerView.Adapter
{
受保护的活动上下文=null;
受保护的IList任务=新列表();
ImageLoader _ImageLoader;
私人位置;
私有int TYPE_头=0;
私有int类型_项=1;
公共事件事件处理程序项单击;
公共PostListAdapter(IList任务、活动上下文)
{
这个。任务=任务;
_imageLoader=imageLoader.Instance;
this.context=上下文;
}
公共PostListAdapter(){}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖int GetItemViewType(int位置)
{
if(IsPositionHeader(位置))
返回Resource.Layout.wall_标题;
返回Resource.Layout.ItemPost;
}
专用bool IsPositionHeader(内部位置)
{
返回位置==0;
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
if(holder.GetType()==typeof(PostViewHodler))
{
PostViewHodler vh=作为PostViewHodler的支架;
变量项=任务[位置1];
var_userData=ServiceLocator.GetService().GetUserData();
vh.ShowPopUpMenuButton.Click+=(发送者,e)=>按钮点击(发送者,e,位置);
var=item.Text;
if(试探文本结尾(“
”) 试探文本=试探文本子字符串(0,试探文本长度-5); 试探文本=试探文本。替换(“
,“\n”); TENTEXT=Regex.Replace(TENTEXT,@“^\s+$[\n]*”,“”,RegexOptions.Multiline); vh.PostText.Text=testext; vh.OwnerFullName.Text=item.CreatorName; vh.DateText.Text=item.CreatedDate.ToString(CultureInfo.InvariantCulture); vh.LikeText.Text=item.Like.likeCount>0 ?item.Like.likeCount.ToString() : ""; vh.CommentText.Text=item.Comments.Any()?item.Comments.Count().ToString():“”; vh.RepostText.Text=item.SharedCount>0?item.SharedCount.ToString():“”; var期权= 新建DisplayImageOptions.Builder() .CacheInMemory(false) .CacheOnDisk(错误) .显示器(新的圆形位图显示器(500)) .Build(); _imageLoader.DisplayImage(item.AvatarUrl、vh.AvatarProfile、选项); } else if(holder.GetType()==typeof(postViewHodleReader)) { PostViewHodlerHeader vh=作为PostViewHodlerHeader的支架; vh.OwnerNameHeader.Text=“Hi from header:-)”; } } 私有无效按钮\单击(对象发送者、事件参数、事件参数、int位置) { ImageButton im=发送方作为ImageButton; PopupMenu=新的PopupMenu(im.Context,im); 菜单.充气(资源.菜单.弹出菜单); //if(item.applicationSerid!=\u userData.UserId) //{ menu.menu.FindItem(Resource.Id.editPopUp).SetVisible(false); menu.menu.FindItem(Resource.Id.deletePopUp).SetVisible(false); //} menu.Show(); Toast.MakeText(context,position.ToString(),ToastLength.Long).Show(); menu.MenuItemClick+=(o,args)=>PopUpMenuClickListener(o,args,位置); } public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType) { View itemView=null; if(viewType==Resource.Layout.wall\u头) { itemView=LayoutFlater.From(parent.Context).充气(Resource.Layout.wall_头,parent,false); PostViewHodlerHeader vhHeader=新的PostViewHodlerHeader(itemView); 返回报头; } else if(viewType==Resource.Layout.ItemPost) { itemView=LayoutFlater.From(parent.Context).充气(Resource.Layout.ItemPost,parent,false); PostViewHodler vhBody=新的PostViewHodler(itemView、OnClick、tasks); 返回体; } 返回null; } 私有void OnClick(内部位置) { 如果(ItemClick!=null) 项目点击(此,位置); } 公共覆盖int ItemCount { 获取{return tasks.Count+1;} } 私有void PopUpMenuClickListener(对象发送者,PopupMenu.MenuItemClickEventArgs e,int位置) { 开关(例如Item.ItemId) { 案例资源.Id.copyLinkPopUp: 打破 案例资源.Id.editPopUp: ((WallActivity)context.EditPost(poppposition); 打破 案例资源.Id.deletePopUp: ((活动)上下文)。删除
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Android.App;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using DexpensMobile.Core.Models;
using DexpensMobile.Core.Services;
using DexpensMobile.Core.Services.AuthService;
using DexpensMobile.Droid.Screens;
using UniversalImageLoader.Core;
using UniversalImageLoader.Core.Display;
using PopupMenu = Android.Widget.PopupMenu;

namespace DexpensMobile.Droid.Adapters
{
    public class PostListAdapter :  RecyclerView.Adapter
    {
        protected Activity context = null;
        protected IList<PostModel> tasks = new List<PostModel>();
        ImageLoader _imageLoader;
        private int popPosition;
        private int TYPE_HEADER = 0;
        private int TYPE_ITEM = 1;
        public event EventHandler<int> ItemClick;

        public PostListAdapter(IList<PostModel> tasks, Activity context)
        {
            this.tasks = tasks;
             _imageLoader = ImageLoader.Instance;
            this.context = context;
        }

        public PostListAdapter() { }

        public override long GetItemId(int position)
        {
            return position;
        }

        public override int GetItemViewType(int position)
        {
            if (IsPositionHeader(position))
                return Resource.Layout.wall_header;
            return Resource.Layout.ItemPost;
        }

        private bool IsPositionHeader(int position)
        {
            return position == 0;
        }

        public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
        {
            if (holder.GetType() == typeof(PostViewHodler))
            {
                PostViewHodler vh = holder as PostViewHodler;
                var item = tasks[position-1];
                var _userData = ServiceLocator.GetService<IAuthService>().GetUserData();
                vh.ShowPopUpMenuButton.Click += (sender, e) => button_Click(sender, e, position);
                var tempText = item.Text;
                if (tempText.EndsWith("<br/>"))
                    tempText = tempText.Substring(0, tempText.Length - 5);
                tempText = tempText.Replace("<br/>", "\n");
                tempText = Regex.Replace(tempText, @"^\s+$[\n]*", "", RegexOptions.Multiline);
                vh.PostText.Text = tempText;
                vh.OwnerFullName.Text = item.CreatorName;
                vh.DateText.Text = item.CreatedDate.ToString(CultureInfo.InvariantCulture);
                vh.LikeText.Text = item.Like.LikesCount > 0
                    ? item.Like.LikesCount.ToString()
                    : "";
                vh.CommentText.Text = item.Comments.Any() ? item.Comments.Count().ToString() : "";
                vh.RepostText.Text = item.SharedCount > 0 ? item.SharedCount.ToString() : "";
                var options =
                    new DisplayImageOptions.Builder()
                        .CacheInMemory(false)
                        .CacheOnDisk(false)
                        .Displayer(new RoundedBitmapDisplayer(500))
                        .Build();
                _imageLoader.DisplayImage(item.AvatarUrl, vh.AvatarProfile, options);
            }
            else if (holder.GetType() == typeof(PostViewHodlerHeader))
            {
                PostViewHodlerHeader vh = holder as PostViewHodlerHeader;
                vh.OwnerNameHeader.Text = "Hi from header :-)";
            }
        }

        private void button_Click(object sender, EventArgs eventArgs, int position)
        {

            ImageButton im = sender as ImageButton;
            PopupMenu menu = new PopupMenu(im.Context, im);
            menu.Inflate(Resource.Menu.popup_menu);
            //if (item.ApplicationUserId != _userData.UserId)
            //{
            menu.Menu.FindItem(Resource.Id.editPopUp).SetVisible(false);
            menu.Menu.FindItem(Resource.Id.deletePopUp).SetVisible(false);
            //}
            menu.Show();
            Toast.MakeText(context, position.ToString(), ToastLength.Long).Show();
            menu.MenuItemClick += (o, args) => PopUpMenuClickListener(o, args, position);
        }

        public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
        {
            View itemView = null;
            if (viewType == Resource.Layout.wall_header)
            {
                itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.wall_header, parent, false);
                PostViewHodlerHeader vhHeader = new PostViewHodlerHeader(itemView);
                return vhHeader;
            }
            else if(viewType == Resource.Layout.ItemPost)
            {  
                    itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.ItemPost, parent, false);
                    PostViewHodler vhBody = new PostViewHodler(itemView, OnClick, tasks);
                    return vhBody;
            }
            return null;
        }

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

        public override int ItemCount
        {
            get { return tasks.Count +1; }
        }

        private void PopUpMenuClickListener(object sender, PopupMenu.MenuItemClickEventArgs e, int position)
        {
            switch(e.Item.ItemId)
            {
                case Resource.Id.copyLinkPopUp: 
                    break;
                case Resource.Id.editPopUp:
                    ((WallActivity)context).EditPost(popPosition);
                    break;
                case Resource.Id.deletePopUp:
                    ((WallActivity)context).DeleteItem(popPosition);
                    break;
            }
        }
    }

    public class PostViewHodler : RecyclerView.ViewHolder
    {
        public TextView OwnerFullName { get; private set; }
        public ImageView AvatarProfile { get; private set; }
        public TextView DateText { get; private set; }
        public TextView PostText { get; private set; }
        public TextView LikeText { get; private set; }
        public TextView CommentText { get; private set; }
        public TextView RepostText { get; private set; }
        public ImageButton ShowPopUpMenuButton { get; private set; }

        public PostViewHodler(View itemView, Action<int> listener, IList<PostModel> posts) : base(itemView)
        {
            OwnerFullName = itemView.FindViewById<TextView>(Resource.Id.UserName);
            AvatarProfile = itemView.FindViewById<ImageView>(Resource.Id.postAva);
            DateText = itemView.FindViewById<TextView>(Resource.Id.dateText);
            PostText = itemView.FindViewById<TextView>(Resource.Id.postText);
            LikeText = itemView.FindViewById<TextView>(Resource.Id.likeText);
            CommentText = itemView.FindViewById<TextView>(Resource.Id.commentText);
            RepostText = itemView.FindViewById<TextView>(Resource.Id.repostText);
            ShowPopUpMenuButton = itemView.FindViewById<ImageButton>(Resource.Id.popupMenuButton);
            itemView.Click += (sender, e) => listener(base.Position);
        }
    }

    public class PostViewHodlerHeader : RecyclerView.ViewHolder
    {
        public TextView OwnerNameHeader{ get; private set; }
        public ImageView AvatarProfileHeader { get; private set; }

        public PostViewHodlerHeader(View itemView) : base(itemView)
        {
            OwnerNameHeader = itemView.FindViewById<TextView>(Resource.Id.details);
            AvatarProfileHeader = itemView.FindViewById<ImageView>(Resource.Id.avatar_image);
        }
    }
}