Xamarin.Android
Aangepaste lijstweergave
Zoeken…
Aangepaste lijstweergave bestaat uit rijen die zijn ontworpen volgens de gebruikersbehoeften.
Voor de lay-out hierboven is uw customrow.axml-bestand zoals hieronder weergegeven
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<ImageView
android:id="@+id/Image"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentLeft="true"
android:layout_marginRight="8dp"
android:src="@drawable/icon" />
<TextView
android:id="@+id/Text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/Image"
android:layout_toRightOf="@id/Image"
android:layout_marginTop="5dip"
android:text="This is Line1"
android:textSize="20dip"
android:textStyle="bold" />
<TextView
android:id="@+id/Text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/Text1"
android:layout_marginTop="1dip"
android:text="This is line2"
android:textSize="15dip"
android:layout_toRightOf="@id/Image" />
</RelativeLayout>
Vervolgens kunt u uw main.axml ontwerpen, die een tekstweergave voor de koptekst en een lijstweergave bevat.
Hoop dat het makkelijk is ...
Maak vervolgens uw Data.cs-klasse die uw rijobjecten zal vertegenwoordigen
public class Data
{
public string Heading;
public string SubHeading;
public string ImageURI;
public Data ()
{
Heading = "";
SubHeading = "";
ImageURI = "";
}
}
Vervolgens hebt u de klasse DataAdapter.cs nodig, Adapters koppelen uw gegevens aan de onderliggende weergave
public class DataAdapter : BaseAdapter<Data> {
List<Data> items;
Activity context;
public DataAdapter(Activity context, List<Data> items)
: base()
{
this.context = context;
this.items = items;
}
public override long GetItemId(int position)
{
return position;
}
public override Data this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = items[position];
View view = convertView;
if (view == null) // no view to re-use, create new
view = context.LayoutInflater.Inflate(Resource.Layout.CustomRow, null);
view.FindViewById<TextView>(Resource.Id.Text1).Text = item.Heading;
view.FindViewById<TextView>(Resource.Id.Text2).Text = item.SubHeading;
var imageBitmap = GetImageBitmapFromUrl(item.ImageURI);
view.FindViewById<ImageView> (Resource.Id.Image).SetImageBitmap (imageBitmap);
return view;
}
private Bitmap GetImageBitmapFromUrl(string url)
{
Bitmap imageBitmap = null;
if(!(url=="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;
}
}
Het belangrijkste onderdeel bevindt zich in de GetView-functie, hier koppelt u uw object aan uw aangepaste rij.
De GetImageBitmapFromUrl maakt geen deel uit van de gegevensadapter, maar ik heb dit hier voor de eenvoud geplaatst.
Eindelijk komen we bij MainActivity.cs
public class MainActivity : Activity
{
ListView listView;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
listView = FindViewById<ListView>(Resource.Id.List);
List<Data> myList = new List<Data> ();
Data obj = new Data ();
obj.Heading = "Apple";
obj.SubHeading = "An Apple a day keeps the doctor away";
obj.ImageURI = "http://www.thestar.com/content/dam/thestar/opinion/editorials/star_s_view_/2011/10/12/an_apple_a_day_not_such_a_good_idea/apple.jpeg";
myList.Add (obj);
Data obj1 = new Data();
obj1.Heading = "Banana";
obj1.SubHeading = "Bananas are an excellent source of vitamin B6 ";
obj1.ImageURI = "http://www.bbcgoodfood.com/sites/bbcgoodfood.com/files/glossary/banana-crop.jpg";
myList.Add(obj1);
Data obj2 = new Data();
obj2.Heading = "Kiwi Fruit";
obj2.SubHeading = "Kiwifruit is a rich source of vitamin C";
obj2.ImageURI = "http://www.wiffens.com/wp-content/uploads/kiwi.png";
myList.Add(obj2);
Data obj3 = new Data();
obj3.Heading = "Pineapple";
obj3.SubHeading = "Raw pineapple is an excellent source of manganese";
obj3.ImageURI = "http://www.medicalnewstoday.com/images/articles/276/276903/pineapple.jpg";
myList.Add(obj3);
Data obj4 = new Data();
obj4.Heading = "Strawberries";
obj4.SubHeading = "One serving (100 g)of strawberries contains approximately 33 kilocalories";
obj4.ImageURI = "https://ecs3.tokopedia.net/newimg/product-1/2014/8/18/5088/5088_8dac78de-2694-11e4-8c99-6be54908a8c2.jpg";
myList.Add (obj4);
listView.Adapter = new DataAdapter(this,myList);
}
Uw uiteindelijke projectstructuur is zoals hieronder getoond.
Als alles in orde is, zou je de uitvoer moeten zien zoals getoond