Я пытаюсь заполнить gridview изображениями и текстом.Сначала я получил код для работы только с изображениями (12 изображений).Этот код адаптера изображения:
class ImageAdapter : BaseAdapter
{
public DataSet participants;
public User MyUser;
private readonly Context context;
public ImageAdapter(Context c)
{
context = c;
}
public override int Count
{
get { return participants.Tables[0].Rows.Count; }
}
public override Java.Lang.Object GetItem(int position)
{
return null;
}
public override long GetItemId(int position)
{
return 0;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
ImageView imageView;
if (convertView == null)
{
// if it's not recycled, initialize some attributes
imageView = new ImageView(context);
imageView.LayoutParameters = new AbsListView.LayoutParams(340, 340);
imageView.SetScaleType(ImageView.ScaleType.CenterCrop);
imageView.SetPadding(8, 8, 8, 8);
}
else
{
imageView = (ImageView)convertView;
}
string participantid = participants.Tables[0].Rows[position][0].ToString();
myservice.aservice myService = new service;
DataSet MyPhotoDataSet = myService.GetPhoto(MyUser.Username, MyUser.Password, participantid );
byte[] imageBytes = (byte[])MyPhotoDataSet.Tables[0].Rows[0][0];
Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
imageView.SetImageBitmap(bitmap);
// imageView.SetImageResource(thumbIds[position]);
return imageView;
}
}
Это работает без проблем.Я получаю все изображения, отображаемые в виде сетки.Мне нужно было добавить текстовое представление для каждого изображения в ячейке и использовать код по следующей ссылке в качестве руководства: Xamarin: создать пользовательскую сетку. Просмотр
Я изменил GetView на это:
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view;
if (convertView == null)
{
// if it's not recycled, initialize some attributes
view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.Cellview, parent, false);
}
else
{
view = convertView;
}
var myimageView = view.FindViewById<ImageView>(Resource.Id.my_image_vieww);
var textview = view.FindViewById<TextView>(Resource.Id.my_text_view);
myimageView.LayoutParameters = new AbsListView.LayoutParams(340, 340);
myimageView.SetScaleType(ImageView.ScaleType.CenterCrop);
myimageView.SetPadding(8, 8, 8, 8);
string participantid = participants.Tables[0].Rows[position][0].ToString();
myservice.aservice myService = new service;
DataSet MyPhotoDataSet = myService.GetPhoto(MyUser.Username, MyUser.Password, participantid );
byte[] imageBytes = (byte[])MyPhotoDataSet.Tables[0].Rows[0][0];
Bitmap bitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
myimageView.SetImageBitmap(bitmap);
textview.Text = participants.Tables[0].Rows[position][1].ToString();
// imageView.SetImageResource(thumbIds[position]);
return myimageView;
}
}
Это Cellview.xml:
?xml version="1.0" encoding="utf-8"?>
<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="wrap_content">
<ImageView
android:layout_width="match_parent"
android:layout_height="250dp"
android:scaleType="centerCrop"
android:id="@+id/my_image_vieww" />
<TextView
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/my_text_view" />
</LinearLayout>
Первый раз без проблем, при втором выполнении convertview
не равно нулю, а строка view = convertView
выполнено, что совпадает с «версией просто изображений».В этот момент строка textview = view.FindViewById<TextView>(Resource.Id.my_text_view)
возвращает ноль, и я не могу понять, почему.Чего мне не хватает?