我有以下代码传递意图,无论是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();
}
我遇到过这些问题,直到现在我才弄明白。
例如,我添加/导入(从图库中)3张图片,这是列表视图中的3行。如果我单击某个项目,则会出现3个对话框,其中包含相同的照片(该特定项目)。这意味着,在单击取消,另一个和另一个之后会出现一个对话框。
删除按钮仅在列表视图中有多个行或项目时才有效。如果只有一个并删除它,列表视图下方的其余控件/工具突然消失。在这种情况下,我在列表视图下方有文本视图,按钮等,但删除了唯一的行后,这些也被删除了。
我真的很感激任何帮助或建议,因为我已经尝试解决这个问题近两天了。谢谢。