사용자 지정 어댑터를 사용하여 목록에서 채우는 gridView에 이상한 문제가 발생했습니다.Monodorid의 GridView 어댑터
gridView의 첫 번째 페이지가 가득차면 다음 항목 중 일부가 누락되거나 동기화되지 않을 때까지 모든 것이 정상적으로 보입니다.
저는 두 개의 화면 캡처를 수행했습니다. 첫 번째는 단일 열, 두 번째는 두 개입니다. 당신이 볼 수 있듯이를 넣고 그림과 같이 첫 번째 페이지가 모두 올바르게 렌더링 :
단일 열 : http://screencast.com/t/mSoEsDf1cY
및
두 칼럼 : http://screencast.com/t/i6zfPLYf
나는 문제를 설명하는 코드를 단순화 :
public class Activity1 : Activity
{
List<Item> _items = null;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
_items = new List<Item>();
for (int i =0; i < 30; i++)
{
Item newItem = new Item();
newItem.Text = "Item " + i;
newItem.Bitmap = Android.Graphics.BitmapFactory.DecodeResource(this.Resources, Resource.Drawable.Icon);
_items.Add(newItem);
}
GridView grid = FindViewById<GridView> (Resource.Id.gridView1);
grid.SetNumColumns(2);
ItemGridViewAdapter adapter = new ItemGridViewAdapter(this, _items);
grid.Adapter = adapter;
}
}
public class Item
{
public Android.Graphics.Bitmap Bitmap { get; set; }
public string Text { get; set; }
}
public class ItemGridViewAdapter : BaseAdapter<Item>
{
private List<Item> _items = null;
private Context _context = null;
public override int Count {
get {
return _items.Count;
}
}
public override long GetItemId (int position)
{
return position;
}
public override Item this[int position] {
get {
return _items[position];
}
}
public ItemGridViewAdapter (Context context, List<Item> items)
{
_items = items;
_context = context;
}
public override View GetView (int position, View convertView, ViewGroup parent)
{
//based on http://developer.android.com/guide/topics/ui/layout/gridview.html
RelativeLayout layout = null;
if (convertView == null) {
layout = new RelativeLayout(_context);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.WrapContent, RelativeLayout.LayoutParams.WrapContent);
ImageView image = new ImageView (_context);
image.LayoutParameters = new Gallery.LayoutParams (150, 150);
image.SetImageBitmap (this[position].Bitmap);
image.Id = 1;
layout.AddView (image);
RelativeLayout.LayoutParams title_lp = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.WrapContent, RelativeLayout.LayoutParams.WrapContent);
TextView title = new TextView (_context);
title.Text = this[position].Text;
title.Id = 2;
title.SetTextColor (Android.Graphics.Color.White);
title_lp.AddRule (LayoutRules.RightOf, 1);
title_lp.AddRule (LayoutRules.CenterVertical);
layout.AddView (title, title_lp);
} else {
layout = (RelativeLayout)convertView;
}
return layout;
}
}
어떤 아이디어라도 감사하겠습니다.
절대적으로 환상적입니다. 나무에서 나무를 볼 수있을 것 같지 않고 겉으로보기에 가장 중요한 한 줄의 코드를 간과 한 것 같습니다. 나는 다시 생각해 냈고 이제는 완벽하게 작동합니다. 많은 감사합니다! –