Dialogbox bug(Xamarin Android)

时间:2016-06-28 10:03:45

标签: c# android listview xamarin alertdialog

我有以下代码传递意图,无论是SELECT_IMAGE还是REQUEST_CAMERA。在这种情况下,从图库中添加图像后,将在列表视图中添加一个项目。

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        // ................ //

        if (resultCode == Result.Ok)
        {
            if (requestCode == REQUEST_CAMERA)
            {
                // ...................//
            }
            else if ((requestCode == SELECT_FILE) && (data != null))
            {
                Android.Net.Uri uri = data.Data;
                string imgUri = Convert.ToString(uri.LastPathSegment);
                string sendUri = Convert.ToString(uri);

                myFileListAdapter.Add(sendUri);
                myFileListAdapter.NotifyDataSetChanged();
                setListViewHeightBasedOnChildren(listViewFiles);

                if (myFileListAdapter.Count == 5)
                {
                    btnAdd.Enabled = false;
                }

                listViewFiles.ItemClick += ClickHandler;
            }
        }
    }

单击列表视图中的项目后,将出现一个对话框,显示图像。在对话框中,有两个选项:取消和删除(图像)。

public void ClickHandler(object sender, ItemClickEventArgs e)
    {
        string path = listViewFiles.GetItemAtPosition(e.Position).ToString();
        Android.Net.Uri uri2 = Android.Net.Uri.Parse(path);

        string[] proj = { MediaStore.Images.ImageColumns.Data };
        var cursor = ContentResolver.Query(uri2, proj, null, null, null);
        var colIndex = cursor.GetColumnIndex(MediaStore.Images.ImageColumns.Data);
        cursor.MoveToFirst();
        BitmapFactory.Options options = new BitmapFactory.Options { InJustDecodeBounds = true };
        BitmapFactory.DecodeFile(cursor.GetString(colIndex), options);
        int height = 250;
        int width = Resources.DisplayMetrics.WidthPixels;
        int outHeight = options.OutHeight;
        int outWidth = options.OutWidth;
        int inSampleSize = 1;

        if (outHeight > height || outWidth > width)
        {
            inSampleSize = outWidth > outHeight
                               ? outHeight / height
                               : outWidth / width;
        }

        options.InSampleSize = inSampleSize;
        options.InJustDecodeBounds = false;
        App.bm = BitmapFactory.DecodeFile(cursor.GetString(colIndex), options);
        System.IO.MemoryStream mem = new System.IO.MemoryStream();
        App.bm.Compress(Bitmap.CompressFormat.Png, 100, mem);
        //byte[] byteArray = mem.ToArray();
        //_imageView.SetImageBitmap(App.bm);

        var temp = new ImageView(this);
        temp.SetImageBitmap(App.bm);
        App.bm = null;
        GC.Collect();

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.SetTitle("Preview");            
        builder.SetView(temp);
        builder.SetCancelable(false);
        builder.SetPositiveButton("Cancel", (senderAlert, args) => 
        {
        });
        builder.SetNegativeButton("Delete?", (senderAlert, args) =>
        {

            Java.Lang.Object toRemove = myFileListAdapter.GetItem(e.Position);
            myFileListAdapter.Remove(toRemove);
            myFileListAdapter.NotifyDataSetChanged();
            setListViewHeightBasedOnChildren(listViewFiles);
            listViewFiles.ItemClick -= ClickHandler;

        });

        builder.Show();
    }

我遇到过这些问题,直到现在我才弄明白。

  1. 例如,我添加/导入(从图库中)3张图片,这是列表视图中的3行。如果我单击某个项目,则会出现3个对话框,其中包含相同的照片(该特定项目)。这意味着,在单击取消,另一个和另一个之后会出现一个对话框。

  2. 删除按钮仅在列表视图中有多个行或项目时才有效。如果只有一个并删除它,列表视图下方的其余控件/工具突然消失。在这种情况下,我在列表视图下方有文本视图,按钮等,但删除了唯一的行后,这些也被删除了。

  3. 我真的很感激任何帮助或建议,因为我已经尝试解决这个问题近两天了。谢谢。

0 个答案:

没有答案