2014-04-08 2 views
0

Xamarin에서 Android app 용 사용자 지정 어댑터를 만들었습니다. ListViewItems를 사용자 지정하려고했기 때문입니다.
선택한 Listitem을 강조하고 싶습니다. 그래서 SimpleListItemActivated1 플래그를 사용하고 싶습니다. 하지만 당신은이 맥락에서 ArrayAdapter이 플래그를 사용할 수 있습니다SimpleListItemActivated1을 Android에서 사용자 지정 어댑터와 함께 사용

_list.Adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItemActivated1, 
         tempNames); 

그러나 나는 내 자신의 어댑터를 구현하고 나는 내 목록보기 항목을 사용자 정의해야합니다

_adapter = new AndroidUI.KundenViewAdapter (this,_kunden); 
_list.Adapter = _adapter 

SimpleListItemActivated1의 사용 방법 내 어댑터?

내 어댑터의 코드는 다음과 같다 :

namespace AndroidUI 
{ 
public class KundenViewAdapter : BaseAdapter<BusinessLayer.Kunde> 
{ 
    private readonly Activity _context; 
    private List<Kunde> _kunden; 

    public KundenViewAdapter(Activity context, IEnumerable<Kunde> kunden) 
    { 
     _kunden = kunden.ToList(); 
     _context = context; 
    } 

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

    public override long GetItemId(int position) 
    { 
     return Convert.ToInt64 (_kunden[position].ID); 
    } 

    public override Kunde this[int position] 
    { 
     get { return _kunden[position]; } 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 
     if (view == null) 
      view = _context.LayoutInflater.Inflate(Resource.Layout.PersonListItem, null); 


     Kunde kunde = _kunden[position]; 
     TextView textview = view.FindViewById<TextView> (Resource.Id.nameTextView); 

     textview.Text = kunde.Name; 

     if (String.IsNullOrEmpty (kunde.Nummer)) 
      view.FindViewById<TextView> (Resource.Id.NummerTextView).Visibility = ViewStates.Gone; 
     else 
      view.FindViewById<TextView> (Resource.Id.NummerTextView).Text = kunde.Nummer; 

     return view; 
    } 
} 

public class LieferantViewAdapter : BaseAdapter<BusinessLayer.Lieferant> 
{ 
    private readonly Activity _context; 
    private List<Lieferant> _lieferant; 

    public LieferantViewAdapter(Activity context, IEnumerable<Lieferant> lieferant) 
    { 
     _lieferant = lieferant.ToList(); 
     _context = context; 
    } 

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

    public override long GetItemId(int position) 
    { 
     return Convert.ToInt64 (_lieferant[position].ID); 
    } 

    public override Lieferant this[int position] 
    { 
     get { return _lieferant[position]; } 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 
     if (view == null) 
      view = _context.LayoutInflater.Inflate(Resource.Layout.PersonListItem, null); 

     Lieferant lieferant = _lieferant[position]; 
     TextView textview = view.FindViewById<TextView> (Resource.Id.nameTextView); 

     textview.Text = lieferant.Name; 

     if (String.IsNullOrEmpty (lieferant.Nummer)) 
      view.FindViewById<TextView> (Resource.Id.NummerTextView).Visibility = ViewStates.Gone; 
     else 
      view.FindViewById<TextView> (Resource.Id.NummerTextView).Text = lieferant.Nummer; 

     return view; 
    } 
} 
} 

답변

0

먼저 클래스에 View selectedRow;을 선언하고 setonitemclickListner

if (selectedRow != null) { 
      selectedRow.setBackgroundResource(color.transparent); 
     } 
     selectedRow = view; 
     view.setBackgroundResource(R.drawable.list_background); 

코드 아래에 추가하면이 3.0 이상으로 잘 버전을 작동

+0

도와 주셔서 감사합니다. 방금 Xamarin을 위해 약간을 바꿔 줘야했다 .Android. 그러나 그것은 완전하게 움직였다. –

+0

당신을 환영합니다 :). –

+0

클릭 한 모든 행을 강조 표시하므로 올바르지 않습니다. 또한 그것은보기 재활용을 망칠 것입니다. **이 코드는 올바른 동작을 수행하기에 충분하지 않습니다. ** –

관련 문제