如何从图像适配器的数组中删除项目。Xamarin gallery

问题描述 投票:-1回答:1
public class ImageAdapter : BaseAdapter
{
    Context context;

    public ImageAdapter (Context conn)
    {
          context = conn;
    }

    public override int Count { get { return thumbIds.Length; } }

    public override Java.Lang.Object GetItem (int position)
    {
          return null;
    }

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

    // create a new ImageView for each item referenced by the Adapter
    public override View GetView (int position, View convertView, ViewGroup parent)
    {
          ImageView pic = new ImageView (context);

          pic.SetImageResource (thumbIds[position]);
          pic.LayoutParameters = new Gallery.LayoutParams (500, 500);
          pic.SetScaleType (ImageView.ScaleType.FitXy);

          return pic;
    }

    // references to our images
    int[] thumbIds = {
            Resource.Drawable.image_1,
            Resource.Drawable.image_2,
            Resource.Drawable.image_3,
            Resource.Drawable.image_4,
            Resource.Drawable.image_5,
            Resource.Drawable.image_6,
            Resource.Drawable.image_7
     };
}

如何从数组中删除项目https:/docs.microsoft.comen-usxamarinandroiduser-interfacecontrolsgallery。画廊

xamarin.android
1个回答
0
投票

你想达到下面的GIF效果吗?

enter image description here

我建议你使用 List<int> 替换 int[]的方法,然后你可以添加一个名为 removeItemImageAdapter 如以下代码。

public void removeItem(int numToRemove)
        {

            if (numToRemove < thumbIds.Count)
            {
                thumbIds.RemoveAt(numToRemove);
                this.NotifyDataSetChanged();
            }

        }

这里是关于 ImageAdapter.cs

using Android.Views;
using Android.Widget;
using Java.Lang;
using System.Collections.Generic;
using System.Linq;

namespace App25
{
    internal class ImageAdapter : BaseAdapter
    {
        private MainActivity mainActivity;

        public ImageAdapter(MainActivity mainActivity)
        {
            this.mainActivity = mainActivity;
        }

        public override int Count { get { return thumbIds.Count; } }

        public override Java.Lang.Object GetItem(int position)
        {
            return thumbIds[position];
        }

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

        // create a new ImageView for each item referenced by the Adapter
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            ImageView pic = new ImageView(mainActivity);

            pic.SetImageResource(thumbIds[position]);
            pic.LayoutParameters = new Gallery.LayoutParams(500, 500);
            pic.SetScaleType(ImageView.ScaleType.FitXy);

            return pic;
        }
        public void removeItem(int numToRemove)
        {

            if (numToRemove < thumbIds.Count)
            {
                thumbIds.RemoveAt(numToRemove);
                this.NotifyDataSetChanged();
            }

        }
        // references to our images
        List<int> thumbIds = new List<int> {
            Resource.Drawable.faded_div,
            Resource.Drawable.icon,
            Resource.Drawable.faded_div1,
            Resource.Drawable.icon1,
            Resource.Drawable.faded_div,
            Resource.Drawable.icon2,
            Resource.Drawable.faded_div
     };
    }
}

这里是 MainActivity.cs

   [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        ImageAdapter imageAdapter;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);
            Gallery gallery = (Gallery)FindViewById<Gallery>(Resource.Id.gallery1);
            Button button1 = FindViewById<Button>(Resource.Id.button1);
            imageAdapter = new ImageAdapter(this);
            gallery.Adapter = imageAdapter;
            button1.Click += Button1_Click;

        }
        int removeItem = 0;
        private void Button1_Click(object sender, System.EventArgs e)
        {


            imageAdapter.removeItem(removeItem);


        }
  }

这是我的 activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:text="remove"
            android:id="@+id/button1"
        />
        <Gallery
        android:id="@+id/gallery1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

更新

如果你想实现长按,推送提醒,然后删除项目,你可以参考以下代码为你的图库实现长按事件。

  gallery.ItemLongClick += Gallery_ItemLongClick; 

  private void Gallery_ItemLongClick(object sender, AdapterView.ItemLongClickEventArgs e)
        {
            // throw new System.NotImplementedException();

            Android.App.AlertDialog.Builder dialog = new Android.App.AlertDialog.Builder(this);
            Android.App.AlertDialog alert = dialog.Create();
            alert.SetTitle("Title");
            alert.SetMessage("Do you want to remove this select item");
            alert.SetButton("OK", (c, ev) =>
            {
                // Ok button click task  
                imageAdapter.removeItem(e.Position);
            });
            alert.Show();



        }

下面是我的运行GIF。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.