【发布时间】:2021-02-05 16:27:27
【问题描述】:
我会尽我所能解释自己。 (Xamarin.Android C#)
我有一个名为 PhotoAlbumAdapter: RecyclerView.Adapter 的类,其中创建、分配和配置包含客户端图像的 RecyclerView 的资源,但该类在 MainActivity: Activity 公共类之外。
这里我有OnClick 方法,当单击 RecyclerView 中的一个图像时显然会触发该方法,我使用该方法保存在某些公共/全局变量中选择的图像的 ID。我的问题是我不知道如何使用从OnClick 获得的结果来启动另一个类:Activity,它会在其中加载我点击的那个客户端的详细信息。
尝试:
var Intent = new Android.Content.Intent (this, typeof (Details));
StartActivity(Intent);
但除非它在MainActivity: Activity 或其他活动中,否则它不起作用。错误告诉我“StartActivity”它在当前上下文中不存在。
除了这个之外,还有什么想法可以触发我的活动Details.cs?
我附上代码。
public class PhotoViewHolder : RecyclerView.ViewHolder
{
public ImageView Image { get; private set; }
public TextView Caption { get; private set; }
public PhotoViewHolder(View itemView, Action<int> listener)
: base(itemView)
{
Image = itemView.FindViewById<ImageView>(Resource.Id.imageView);
Caption = itemView.FindViewById<TextView>(Resource.Id.textView);
itemView.Click += (sender, e) => listener(base.LayoutPosition);
}
}
public class PhotoAlbumAdapter : RecyclerView.Adapter
{
public event EventHandler<int> ItemClick;
PhotoAlbum mPhotoAlbum;
public PhotoAlbumAdapter(PhotoAlbum photoAlbum)
{
mPhotoAlbum = photoAlbum;
}
public override RecyclerView.ViewHolder
OnCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.From(parent.Context).
Inflate(Resource.Layout.LCardView, parent, false);
PhotoViewHolder vh = new PhotoViewHolder(itemView, OnClick);
return vh;
}
public override void
OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
try
{
PhotoViewHolder vh = holder as PhotoViewHolder;
vh.Image.SetImageBitmap(GetImageBitmapFromUrl(mPhotoAlbum[position].PhotoID));
vh.Caption.Text = mPhotoAlbum[position].Caption;
}
catch (Exception Ex)
{
string LineErrorNumber = Ex.StackTrace.Substring(Ex.StackTrace.Length - 7, 7);
}
}
public override int ItemCount
{
get { return mPhotoAlbum.NumPhotos; }
}
void OnClick(int position)
{
try
{
VarGlobal.gIdRecyclerMaterial=(position);
Busqueda.Globales.IdSeleccionado = Convert.ToInt32(mPhotoAlbum[position].TipoMaterial.Substring(2));
char c = mPhotoAlbum[position].TipoMaterial[0];
VarGlobal.gNombreMaterialR = Convert.ToString(c);
//Trigger detalles...
//Need it here ... ********************************************************************************
//var Intent = new Android.Content.Intent(this, typeof(Details));
//StartActivity(Intent);
}
catch (Exception Ex)
{
string LineErrorNumber = Ex.StackTrace.Substring(Ex.StackTrace.Length - 7, 7);
}
}
private Bitmap GetImageBitmapFromUrl(string url)
{
Bitmap imageBitmap = null;
using (var webClient = new WebClient())
{
var imageBytes = webClient.DownloadData(url);
if (imageBytes != null && imageBytes.Length > 0)
{
imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
}
}
return imageBitmap;
}
}
}
【问题讨论】:
-
你没有任何名为
Details的类。 -
您的
ViewHolder子类在OnCreateViewHolder中通过View,并且所有Android 视图都包含您可以使用的上下文(即yourViewHolderContext.StartActivity...):docs.microsoft.com/en-us/dotnet/api/…跨度> -
是的,我愿意@Jason
-
不在您发布的代码中。该文件可能被命名为
Details.cs,但这并不意味着该类被命名为Details。你可以为文件命名任何你想要的名字,这与里面的类的名字无关。
标签: c# android visual-studio xamarin android-recyclerview