gpt4 book ai didi

android - 以编程方式设置 ListView 项的背景颜色

转载 作者:行者123 更新时间:2023-11-30 05:09:06 25 4
gpt4 key购买 nike

在我的应用程序中,我必须根据 ListView 项的字符串内容自动设置 ListView 项的背景色。

目前,该应用程序使用以下代码:

    private void UpdateListView(string itemFromList, ListView listView)
{
int itemListPosition = listViewAdapter.GetPosition(itemFromList);
listView.SetItemChecked(itemListPosition, true);

View child = listView.GetChildAt(itemListPosition);

if (child != null)
{
for (int i = 0; i < listViewAdapter.Count; i++)
{
View otherChild = listView.GetChildAt(i);

if (otherChild != null)
{
otherChild.SetBackgroundColor(defaultColor);
}
}

child.SetBackgroundColor(Color.Green);
}
}

其中 listViewAdapterMainActivity 类中的全局变量,如下定义到 onCreate 方法中:

listViewAdapter= new ArrayAdapter<String>(this, Android.Resource.Layout.SimpleListItem1, settingItems);
listView.Adapter = listViewAdapter;

settingItems只是一个定义为字符串列表的全局变量。

上面的代码工作正常,所以给定 ListView 项的背景颜色变为绿色,其余 ListView 项变为默认颜色,直到 ListView 向其添加垂直滚动。

现在在 ListView 获得更多项目和垂直滚动之后

View child = listView.GetChildAt(itemListPosition);
上述调用的

child 对象为空。因此,我无法再根据位置访问 ListView 中的项目。您知道我该如何解决这个问题吗?

最佳答案

我在GetView方法中写了一个demo,设置item背景色,大家可以引用。

这是演示的GIF。

enter image description here

您可以更改 ListView 适配器的 GetView 方法中的代码。我不知道你想在 ListView 中更改哪些项目,所以我将位置设置在 1,3,5。你可以自己改变它。

MyAdapter.cs

   class MyAdapter : BaseAdapter<ColorDemo>
{
Activity context;
List<ColorDemo> colors { get; set; }
public MyAdapter(Activity context , List<ColorDemo> colors)
{
this.context = context;
this.colors = colors;

}

public override ColorDemo this[int position] {
get
{
return colors[position];
}
}

public override int Count => colors.Count;



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

public override View GetView(int position, View convertView, ViewGroup parent)
{
View newView = convertView;
if (newView == null)
newView = context.LayoutInflater.Inflate(Resource.Layout.ItemView, null);
newView.FindViewById<TextView>(Resource.Id.item_tv).Text = colors[position].ColorName;
if (position==1|| position == 3|| position == 5)
{
newView.FindViewById<TextView>(Resource.Id.item_tv).SetBackgroundColor( Color.Blue);

}
else
{
newView.FindViewById<TextView>(Resource.Id.item_tv).SetBackgroundColor(Color.Green);

}

return newView;

}
}

下面是activity_main.axmlItemView.axml,可以通过ItemView自定义listview中的item

activity_main.axml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent">

<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_color"
/>
</RelativeLayout>

ItemView.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="this text"
android:textSize="50dp"
android:id="@+id/item_tv"
android:background="@android:color/holo_red_dark"
/>
</LinearLayout>

以下代码与MainActivity.cs相关

MainActivity.cs

    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
ListView lv_color = FindViewById<ListView>(Resource.Id.lv_color);
// lv_color.SetItemChecked(2,true);
List<ColorDemo> colors = new List<ColorDemo>();
colors.Add(new ColorDemo("red"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("red"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("red"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("red"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("red"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("red"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("green"));
colors.Add(new ColorDemo("green"));

MyAdapter myAdapter = new MyAdapter(this,colors);
lv_color.Adapter=myAdapter;
}
}

关于android - 以编程方式设置 ListView 项的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54011699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com