クライアントの名前と年齢を示す簡単なリストビューがあります。リストはスクロールする必要があり、私は行の背景の代替色(白と青)を作った。しかし、クライアントの年齢を含むセルが18の場合は、オレンジ色で強調表示したいので、年齢が負の場合は赤で強調表示したい(エラーがあることを知らせるため)。 スクロールを開始するまではすべて正常に動作します。その時点では、オレンジ/赤の背景が正しく適用されていないため、すべてがうんざりしています。 アダプタコードは以下のとおりです。デバッグ中に、変数の位置が各繰り返しで値を変更することに気付きました。たとえば、最初に8行しか表示しない場合は、スクロールした後、その位置が9,10、...、5、4になるのがわかります。行が再利用されている可能性があると思いますが、 ?私は多くの時間をかけたが、まだ成功しなかったので、誰かが助けてくれることを願っています。ありがとうございました。Xamarinは、セルが再利用されているときにリストビュー内のセルを強調表示します。
class MyListViewAdapter : BaseAdapter<dbClient>
{
public List<dbClient> mItems;
private Context mContext;
private int mRowLayout;
private string[] mAlternatingColors;
// Default constructor
public MyListViewAdapter(Context context, List<dbClient> items, int rowLayout)
{
mItems = items;
mContext = context;
mRowLayout = rowLayout;
mAlternatingColors = new string[] { "#F2F2F2", "#00bfff" };
}
// Tells how many rows are in the dataset
public override int Count
{
get { return mItems.Count; }
}
// Return a row identifier
public override long GetItemId(int position)
{
return position;
}
// Return the data associated with a particular row
public override dbClient this[int position]
{
get { return mItems[position]; }
}
// Return a view for each row
public override View GetView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if(row == null)
{
row = LayoutInflater.From(mContext).Inflate(Resource.Layout.listview_row, null, false);
}
row.SetBackgroundColor(Color.ParseColor(mAlternatingColors[position % mAlternatingColors.Length]));
TextView txtName = row.FindViewById<TextView>(Resource.Id.nameView);
txtName.Text = mItems[position].Name;
TextView txtAge = row.FindViewById<TextView>(Resource.Id.ageView);
txtAge.Text = mItems[position].Age.ToString();
// highlight if aged 18
if(txtAge.Text == "18")
{ txtAge.SetBackgroundColor(Color.Orange); }
// signale there is error in the age reported
if(txtAge.Text.Contains("-"))
{ txtAge.SetBackgroundColor(Color.Red); }
return row;
}
private Color GetColorFromInteger(int color)
{
return Color.Rgb(Color.GetRedComponent(color), Color.GetGreenComponent(color), Color.GetBlueComponent(color));
}
}
私の答えを確認しましたか?何の問題? –