2015-07-20 12 views
5

Orijinal olarak iki MvxListView denetimleri olan bir ScrollView sahibim. Bir ScrollView içinde ListView kontrolleri olması`MvxLinearLayout` için` ItemClick`'e nasıl bağlarım?

ikisi de ebeveyn yüksekliğini doldurup kendi kaydırma mantığı sağlamaya çalışıyoruz çünkü mantıklı olsa Android, tarafından desteklenmemektedir.

İstediğim şey, ScrollView numaralı telefonun içinde tam yüksekliği olan iki tane seçilemez liste. MvxListView'un genişlediği ListView, yüksekliği manuel olarak kesmeden bunu desteklemez.

Bunun sebebi, ayrı kaynaklarıma bağlı olduğum ve her ikisinin de kendi başlığına sahip olduğum iki ayrı liste olduğudur. Tüm bunların bir ScrollView içinde kaydırılabilir olması gerekiyor.

Daha sonra, numaralı bir ItemSource özelliğine sahip olduğu için MvxLinearLayout bulundu. Mükemmel çalışıyor, benim öğelerimi gösterir ve tüm öğelerin tam yüksekliğini elde etmem için ScrollView adresindeki listelerimi de kaydırırım. Sorun şu ki, bir ItemClick özelliğine sahip gibi görünmüyor, bu yüzden kullanıcı girdimi listemden almanın bir yolu yok.

Bunu yapmanın temiz bir yolu bindable olarak biliyor mu? Kodumun arkasına onItemClick işleyicileri eklemek istemiyorum. İstediğimi yapabileceğim başka bir MvvmCross kontrolü var mı?

+0

I:

Şimdi
public class MvxClickableLinearLayoutAdapter : MvxAdapterWithChangedEvent, View.IOnClickListener { public delegate void ItemClickDelegate(object item); public ItemClickDelegate OnItemClick; public MvxClickableLinearLayoutAdapter(Context context) : base(context) { } public void OnClick(View view) { var mvxDataConsumer = view as IMvxDataConsumer; if (mvxDataConsumer != null && OnItemClick != null) { OnItemClick(mvxDataConsumer.DataContext); } } protected override View GetView(int position, View convertView, ViewGroup parent, int templateId) { View view = base.GetView(position, convertView, parent, templateId); view.SetOnClickListener(this); return view; } } 

size ListView ile yapacağını gibi ItemClick bağlanabilmektedir neden tüm şarkılarınızı şarkıya neden soktuğunuzu anlamayın le ListView? – Cheesebaron

cevap

10

Sen MvxLinearLayout ItemClick desteklemek için uzatabilirsiniz:

public class MvxClickableLinearLayout : MvxLinearLayout 
{ 
    public MvxClickableLinearLayout(Context context, IAttributeSet attrs) 
     : this(context, attrs, new MvxClickableLinearLayoutAdapter(context)) 
    { 
    } 

    public MvxClickableLinearLayout(Context context, IAttributeSet attrs, MvxClickableLinearLayoutAdapter adapter) 
     : base(context, attrs, adapter) 
    { 
     var mvxClickableLinearLayoutAdapter = Adapter as MvxClickableLinearLayoutAdapter; 
     if (mvxClickableLinearLayoutAdapter != null) 
     { 
      mvxClickableLinearLayoutAdapter.OnItemClick = OnItemClick; 
     } 
    } 

    public ICommand ItemClick { get; set; } 

    public void OnItemClick(object item) 
    { 
     if (ItemClick != null && ItemClick.CanExecute(item)) 
     { 
      ItemClick.Execute(item); 
     } 
    } 
} 

Adaptör:

local:MvxBind="ItemClick SomeCommand" 
+2

MvvmCross 5.1'de çalışmıyor çünkü mvxDataConsumer ayrıştırıldığında boştur (IMvxDataConsumer olarak görüntüle). Neden olduğu hakkında bir fikrin var mı? –

0

Düzen içindeki ayrı öğelere bir Tıklatma bağlamanız eklemeniz gerekir. Böyle herhangi düzen İçin Tıkla ekleyebilirsiniz:

<RelativeLayout 
    android:background="?android:attr/selectableItemBackground" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/relativeLayout1" 
    local:MvxBind="Click SomeCommand"> 
+0

Merhaba, cevabınız için teşekkürler. Evet, bunu yapabileceğimin farkındayım, fakat 'MvxLinearLayout' ile bütün nokta, veriye bağlı bir "ItemsSource" 'a sahip olması, bu yüzden öğelerimi otomatik olarak listeye ekler. Önerilerinizi yapmak için öğelerim için tüm görünümleri el ile yapmalı ve "Tıkla" ya bağlanmalı ya da MVVM perspektifinden çok temiz olmayan "MvxLinearLayout" tarafından otomatik olarak bağlanan veriler alınmalıdır. –

0

Eğer MvxLinearLayout için bir Öğe Şablonu belirtmek denediniz mi? ör. local:MvxItemTemplate="@layout/item_template"? Tıklama işlemlerini yapmak istediğiniz kontrollerde Öğe Şablonu'ndaki MvvmCross Tıklama Bağlantısını ayarlayabilirsiniz.