¿Cómo puedo enlazar a `ItemClick` para un` MvxLinearLayout`?
Tengo un ScrollView
que envolvió originalmente dos controles de MvxListView
.
Tener controles ListView
en un ScrollView
no es compatible con Android, lo cual tiene sentido, ya que ambos intentan llenar la altura de los padres y proporcionar su propia lógica de desplazamiento.
- Cómo detener un proceso de System.Diagnostics.Process y obtener las estadísticas al final
- Cómo crear un menú de opciones en android?
- Protección de contraseña de Android Keystore
- No se pueden establecer propiedades en clases anidadas desde Xaml
- SDK de Android instalado, pero adb.exe ausente
Lo que quiero es dos listas de unscrollable con su altura completa dentro de mi ScrollView
. ListView
que MvxListView
amplía no admite esto sin hackear la altura manualmente.
La razón por la que quiero esto es porque tengo dos listas separadas que he obligado a separar las fuentes y ambos tienen su propio encabezado. Necesito que todo esto sea desplazable dentro de un ScrollView
.
Entonces encontré MvxLinearLayout
que es un LinearLayout
que tiene una propiedad ItemSource
que puedo enlazar. Funciona excelente, muestra mis artículos y consigue la altura completa de todos los artículos así que puedo enrollar mis dos listas en mi ScrollView
. El problema es que no parece tener una propiedad ItemClick
, así que no tengo una forma de obtener la entrada del usuario de mi lista.
¿Alguien sabe una manera limpia de hacer esto de una manera ligable? No quiero adjuntar los controladores onItemClick
en mi código. ¿Hay otro control de MvvmCross que pueda hacer lo que quiero?
- Xamarin.Android JmDNS vinculante cuestiones
- Error: JNI ERROR (bug de la aplicación): se accede a la referencia global obsoleta
- Generación de ZeroMQ para el emulador de Android x86
- No se puede obtener SyncAdapter para trabajar en Xamarin
- Monodroid - Manejo de eventos en las vistas secundarias de filas ListView reutilizadas
- Cómo inflar una vista en expansión con una vista de relación de aspecto fija
- ¿Dónde está la clave de firma de Android en el disco que crea Xamarin Studio?
- Error de compilación: Error con el proyecto de Android en Xamarin.Forms
Puede extender MvxLinearLayout para apoyar ItemClick
:
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); } } }
Adaptador:
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; } }
Ahora puedes enlazar a ItemClick
como harías con ListView
:
local:MvxBind="ItemClick SomeCommand"
Debe agregar una vinculación de clic a los elementos separados dentro del diseño. Puede agregar un clic a cualquier diseño como este:
<RelativeLayout android:background="?android:attr/selectableItemBackground" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/relativeLayout1" local:MvxBind="Click SomeCommand">
¿Ha intentado especificar una plantilla de elemento para MvxLinearLayout? Por ejemplo, local:MvxItemTemplate="@layout/item_template"
? Puede configurar el enlace MvvmCross Click dentro de la plantilla de elemento en los controles para los que desea manejar los clics.
- Extraer toda la cadena Hardcoded al recurso de cadena: Android Studio
- Aplicar backgroundtint al fondo drawable para API 19