首页 > 解决方案 > Xamarin Android 的列表视图中未加载嵌入式资源

问题描述

[更新]

因此,通过使用提供的依赖注入器,我找到了一种非常简单的方法来解决这个问题,它是从 Android 中的资产加载东西。我将不得不寻找如何在 iOS 中做到这一点,但现在这不是一个大问题。

然而,更令人担忧的是,单个单元格没有按应有的方式显示。

XAML 的修订(和相关)位如下:

<ViewCell>
   <StackLayout Orientation="Vertical">
     <Label Text="{Binding Name}" FontAttributes="Bold" FontSize="Large" HorizontalOptions="StartAndExpand" VerticalOptions="Start"></Label>
     <StackLayout Orientation="Horizontal">
       <Label Text="{Binding Email}" HorizontalOptions="Fill" VerticalOptions="Start"></Label>
       <Image Source="{Binding image.Source}" HorizontalOptions="EndAndExpand"></Image>
     </StackLayout>
  </StackLayout>
</ViewCell>

因此,当前显示如下:
-> 第 1 行 = 完美
-> 第 2 行:电子邮件=完美,图像 = 仅可见一小部分

我怀疑这与布局有关,但我不知道为什么要这样做。

建议,请!
[旧帖子]
我有一个 XAML 文件,它可以在 Android 预览窗格中正确显示,但图像元素除外。这是我正在使用的 XAML:

    <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:App3"
             x:Class="App3.MainPage">

    <StackLayout>
        <!-- Place new controls here -->
        <Label Text="WPF test for POD" 
           HorizontalOptions="Center"
           VerticalOptions="Center" />
        <Entry Placeholder="Email address" Keyboard="Email"></Entry>
        <Entry Placeholder="Password" IsPassword="True" Text="WobblyDobbly"></Entry>
        <Button x:Name="BtnSignIn" Text="Sign In" HorizontalOptions="FillAndExpand" Clicked="BtnSignIn_Clicked">
        </Button>
        <StackLayout x:Name="slUserInfo" HorizontalOptions="FillAndExpand">
            <Entry Placeholder="Name" x:Name="txtName" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"></Entry>
            <Entry Placeholder="Email" x:Name="txtEmail" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Keyboard="Email"></Entry>
            <Button Text="Add to list" x:Name="btnAddToList" Clicked="btnAddToList_Clicked" HorizontalOptions="StartAndExpand"></Button>
        </StackLayout>
        <ListView x:Name="lvItems" VerticalOptions="Start" HorizontalOptions="StartAndExpand">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <!--
                    <TextCell Text="{Binding Name}" Detail="{Binding Email}">

                    </TextCell>
                    -->
                    <ViewCell>
                        <StackLayout Orientation="Vertical">
                            <Label Text="{Binding Name}" HorizontalOptions="FillAndExpand" FontAttributes="Bold"></Label>
                            <Label Text="{Binding Email}" HorizontalOptions="StartAndExpand"></Label>
                            <Image Source="{Binding image.Source}" HorizontalOptions="End"> </Image>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>               

            </ListView.ItemTemplate>            

        </ListView>
        <Button x:Name="btnAddItem" Text="Add..." HorizontalOptions="Start" Clicked="btnAddItem_Clicked">

        </Button>
    </StackLayout> 
</ContentPage>

在后端,我有这些类:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using Xamarin.Forms;

namespace App3
{
    class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public Image image { get; set; }
        public Item( int AnId, string AName, string AnEmail)
        {
            Id = AnId;
            Name = AName;
            Email = AnEmail;
        }
    }

    class ItemList : ObservableCollection<Item>
    {
        public void Add(string Name, string Email,string AssignedImage, int Id = 0)
        {
            int ActualID = Id;
            Item item = new Item(Id, Name, Email);
            if (ActualID == 0)
            {
                ActualID = NextId();
            }
            item.image = new Image();
            item.image.Source = ImageSource.FromResource(AssignedImage);
            Add(item);
        }

        public int NextId()
        {
            int CurrentCount = Count;
            return ++CurrentCount;
        }
    }
}

使用 UWP 项目时,一切正常。但是,当我在 Android 上运行它时 - 就像在预览中一样 - 它不会显示图像。

我的 MainPage.xaml.cs 看起来像这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace App3
{
    public partial class MainPage : ContentPage
    {
        private ItemList model = new ItemList();
        public MainPage()
        {
            InitializeComponent();
            lvItems.ItemsSource = model;
            model.Add("Andrea", "email@email.com", "App3.arrow_left.png");
            slUserInfo.IsVisible = false;
        }

        private void BtnSignIn_Clicked(object sender, EventArgs e)
        {

        }

        private void btnAddItem_Clicked(object sender, EventArgs e)
        {
            slUserInfo.IsVisible = true; 
        }

        private void btnAddToList_Clicked(object sender, EventArgs e)
        {
            model.Add(txtName.Text, txtEmail.Text,"App3.arrow_left.png");
            txtName.Text = "";
            txtEmail.Text = "";
        }
    }
}

该图像标记为 EmbeddedResource,位于 common 项目下的 /Resources 中。

当我将它作为 UWP 运行时,图像正确显示。当我将它作为 Android 应用程序运行时,图像根本不显示。Android 应用程序中没有特殊代码。我确定我做错了什么,你能指出我正确的方向吗?

PS 这是我第一个全天致力于 Xamarin,所以请不要回避基本问题,因为它很可能是我忽略的一些简单问题。

标签: c#androidlistviewxamarin.forms

解决方案


推荐阅读