C# 如何在Xamarin.Android中向ListActivity上的项目添加图标或图片。

C# 如何在Xamarin.Android中向ListActivity上的项目添加图标或图片。,c#,android,xamarin,C#,Android,Xamarin,我想根据对象属性的状态添加勾号或叉号。这是我在MainActivity中的代码,它使用intent传递列表: Button callHistoryButton = FindViewById<Button>(Resource.Id.ScanHistoryButton); callHistoryButton.Click += (sender, e) => { var intent = new Inten

我想根据对象属性的状态添加勾号或叉号。这是我在MainActivity中的代码,它使用intent传递列表:

Button callHistoryButton = FindViewById<Button>(Resource.Id.ScanHistoryButton);
            callHistoryButton.Click += (sender, e) =>
            {
                var intent = new Intent(this, typeof(ScanHistoryActivity));
                intent.PutStringArrayListExtra("Codes", codes);
                StartActivity(intent);
            };
因此,如果对象成功属性为true,我希望在ScanhistoryActivity中显示绿色勾号,如果为false,则显示红色十字。我不希望人们能够手动选择或取消选择


列表活动是否适用于此?

您必须创建自己的自定义适配器才能使其工作

此外,您还必须创建一个布局,以便使用适配器在列表中填充数据(例如,每行的布局)

例如:

AdapterRow.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:id="@+id/checkBox1"
    android:focusable="false"
    android:focusableInTouchMode="false" />
<ImageView xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_gravity="center"
    android:background="#ff997eff"
    android:layout_marginLeft="10dp"
    android:id="@+id/BusinessImageView" />

适配器.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
using System.Threading.Tasks;

using System.Linq;

using Android.App;
using Android.Graphics;
using Android.Views;
using Android.Widget;

namespace testProject
{
public class SomeAdapter : BaseAdapter<Staff>
{
    private readonly List<Staff> _list;
    private readonly Activity _context;
    public int position;


    public SomeAdapter (Activity context, List<Staff> list)
    {
        _context = context;
        _list = list;
    }

    public List<Staff> GetList()
    {
        return _list;
    } 

    public override long GetItemId(int position)
    {
        return position;
    }

    public override int Count
    {
        get { return _list.Count; }
    }

    public override Staff this[int position]
    {
        get { return _list[position]; }
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var view = convertView;

        if (view == null) {
            view = _context.LayoutInflater.Inflate(Resource.Layout.adapterRow, null);
        }

        ImageView img1 = view.FindViewById<ImageView> (Resource.Id.BusinessImageView);
        CheckBox chk  = view.FindViewById<CheckBox> (Resource.Id.checkBox1);
//Do aything you want with the data here using _list[position]

        return view;

    }

}
使用系统;
使用System.Collections.Generic;
利用制度全球化;
Net系统;
使用System.Threading.Tasks;
使用System.Linq;
使用Android.App;
使用Android.Graphics;
使用Android.Views;
使用Android.Widget;
命名空间测试项目
{
公共类SomeAdapter:BaseAdapter
{
私有只读列表_List;
私有只读活动\u上下文;
公共职位;
公共SomeAdapter(活动上下文、列表)
{
_上下文=上下文;
_列表=列表;
}
公共列表GetList()
{
返回列表;
} 
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖整数计数
{
获取{return\u list.Count;}
}
此[int位置]的公共文件
{
获取{返回_列表[位置];}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var-view=convertView;
如果(视图==null){
视图=_context.LayoutInflater.Inflate(Resource.Layout.adapterRow,null);
}
ImageView img1=view.FindViewById(Resource.Id.BusinessImageView);
复选框chk=view.findviewbyd(Resource.Id.checkBox1);
//使用_list[position]对此处的数据执行任何您想要的操作
返回视图;
}
}
}

这就是如何用适配器填充listview

_ListView = FindViewById<ListView>(Resource.Id.ListView);
_ListView .ItemClick += _ListView_OnItemClick;
_staffList = new List<Staff>();
_staffList = //Fill it with data
var adapter = new SomeAdapter (this, _staffList);
_ListView.Adapter = adapter;
adapter.NotifyDataSetChanged();
\u ListView=findviewbyd(Resource.Id.ListView);
_ListView.ItemClick+=\u ListView\u OnItemClick;
_staffList=新列表();
_staffList=//用数据填充它
var adapter=新的SomeAdapter(这个,_staffList);
_Adapter=适配器;
adapter.NotifyDataSetChanged();
要勾选或取消勾选,请执行以下操作:

private void _ListView_OnItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        {
            CheckBox chk = e.View.FindViewById<CheckBox>(Resource.Id.checkBox1);
            if (chk.Checked == true)
            {
                chk.Checked = false;

            }
            else
            {
                chk.Checked = true;
            }
        }
private void\u ListView\u OnItemClick(对象发送者,AdapterView.ItemClickEventArgs e)
{
{
复选框chk=e.View.findviewbyd(Resource.Id.checkBox1);
如果(chk.Checked==true)
{
chk.Checked=假;
}
其他的
{
chk.Checked=真;
}
}

受保护的重写void OnCreate(捆绑包) { base.OnCreate(bundle); var代码=Intent.Extras.GetStringArrayList(“代码”)

code.ToList();
ListAdapter=new ArrayAdapter(此,Android.Resource.Layout.SimpleListItemChecked,代码);
ListView lv=FindViewById(Android.Resource.Id.List);
lv.ChoiceMode=ChoiceMode.Multiple;
lv.Clickable=false;
//复选框chk=lv.findviewbyd(Resource.Id.checkBox1);
foreach(代码中的var c)
{
如果(c.Contains(“发送成功”))
{
int postion=代码IndexOf(c);
lv.SetItemChecked(位置,正确);
lv.Clickable=false;
}
}
}

那么你在xamarin中使用相同的本机代码?是的,我想是的?你是什么意思?好的,我的简单问题是你能在xamarin中使用适配器吗?我知道cordova在这个观点中建议是的,它确实像现在一样工作,我只想在success属性设置为true时标记项。我能用SimpleListemChecked列表吗漂亮的绿色勾号,但使它们不可点击,只有在属性改变时才会改变??这是你要求的xml代码,有了它,你就有了相同的外观,你可以改变适配器或OnClick来做任何你想做的事,我不确定你想什么时候点击它们谢谢,我正在努力解决这个问题!我不想让列表项被删除如果他们的success属性=success:if(theScan.success==“SENT SUCCESSFULLY”{itemchecked=true;}---我已将success属性设置为一个字符串,现在设置为您不希望单击的所有内容。将属性
可聚焦
可聚焦InTouchMode
可单击
设置为false,然后重试。您也可以在axml中执行此操作,例如在复选框中
_ListView = FindViewById<ListView>(Resource.Id.ListView);
_ListView .ItemClick += _ListView_OnItemClick;
_staffList = new List<Staff>();
_staffList = //Fill it with data
var adapter = new SomeAdapter (this, _staffList);
_ListView.Adapter = adapter;
adapter.NotifyDataSetChanged();
private void _ListView_OnItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        {
            CheckBox chk = e.View.FindViewById<CheckBox>(Resource.Id.checkBox1);
            if (chk.Checked == true)
            {
                chk.Checked = false;

            }
            else
            {
                chk.Checked = true;
            }
        }
        codes.ToList();
        ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItemChecked, codes);
        ListView lv = FindViewById<ListView>(Android.Resource.Id.List);
        lv.ChoiceMode = ChoiceMode.Multiple;
        lv.Clickable = false;

        //CheckBox chk = lv.FindViewById<CheckBox>(Resource.Id.checkBox1);         
        foreach (var c in codes)
        {
            if (c.Contains("SENT SUCCESSFULLY"))
            {
                int postion = codes.IndexOf(c);
                lv.SetItemChecked(postion, true);
                lv.Clickable = false;
            }
        }
    }