为同一行中的两个元素创建适配器

时间:2016-05-03 15:18:44

标签: android listview xamarin android-linearlayout adapter

我正在尝试为listview创建一个适配器,它包含同一行中的两个元素。

LayoutFile有两个线性LinearLayouts Layout Image,有两个图像和名称

适配器仅填充第一个LinearLayout数据,并且不显示第二个LinearLayout。

有人可以帮助我吗?提前谢谢!

XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<ImageView
        android:id="@+id/imageViewItem"
        android:layout_width="match_parent"
        android:layout_height="175dp"
        android:src="@drawable/icon" />
<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="left">
<TextView
            android:id="@+id/textViewTitleItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:text="Title"
            android:gravity="center" />
</LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="right">
<TextView
            android:id="@+id/textViewPriceItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:text="Price"
            android:gravity="center" />
    </LinearLayout>
</LinearLayout>
</LinearLayout>

这只是一个视图,我想在同一行复制它。

适配器下方:

public ItemAdapter(Activity activity, int layoutResourceId)
    {
        this.activity = activity;
        this.layoutResourceId = layoutResourceId;
    }

public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var row = convertView;
        var currentItem = this[position];
        TextView txtViewTitle;
        TextView txtViewPrice;
        ImageView imgViewItem;

        if (row == null)
        {
            var inflater = activity.LayoutInflater;
            row = inflater.Inflate(layoutResourceId, parent, false);

            txtViewTitle = row.FindViewById<TextView>(Resource.Id.textViewTitleItem);
            txtViewPrice = row.FindViewById<TextView>(Resource.Id.textViewPriceItem);
            imgViewItem = row.FindViewById<ImageView>(Resource.Id.imageViewItem);

        } else
            txtViewTitle = row.FindViewById<TextView>(Resource.Id.textViewTitleItem);
            txtViewPrice = row.FindViewById<TextView>(Resource.Id.textViewPriceItem);
            imgViewItem = row.FindViewById<ImageView>(Resource.Id.imageViewItem);

        txtViewTitle.Text = currentItem.Title;
        txtViewPrice.Text = Convert.ToString(currentItem.Price);

        return row;
}

1 个答案:

答案 0 :(得分:1)

您似乎没有为您的父母LinearLayout提供方向。默认情况下它是水平的。 这就是为什么它只展示顶级布局内容的原因。 您需要将其设置为vertical,以便在列表中显示整个内容。

android:orientation="vertical"