Ordinate le righe documento in descending in editazione di un documento interno.

Implementato dialog custom per gli articoli disponibili all'inventario / documenti interni con la possibilità di specificare se l'articolo è stato già aggiunto.
This commit is contained in:
Giuseppe Scorrano 2023-03-28 19:20:44 +02:00
parent 79c4bdad48
commit 16cb685bb3
15 changed files with 268 additions and 53 deletions

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="21088B8EFD" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-03-28T12:31:53.895715100Z" />
</component>
</project>

View File

@ -24,6 +24,6 @@ public interface MtbColrDao {
@Delete @Delete
void delete(SqlMtbColr mtbColr); void delete(SqlMtbColr mtbColr);
@Query("SELECT * from mtb_colr where id_collo = :idDocument") @Query("SELECT * FROM mtb_colr WHERE id_collo = :idDocument ORDER BY id DESC")
List<SqlMtbColr> getDocumentRows(long idDocument); List<SqlMtbColr> getDocumentRows(long idDocument);
} }

View File

@ -47,8 +47,9 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.Document
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalView; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalView;
import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemsView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@ -231,7 +232,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
@Override @Override
public void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita, boolean isUntMisDig) { public void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita, boolean isUntMisDig) {
this.onLoadingStarted();
MtbAart mtbAart = new MtbAart(); MtbAart mtbAart = new MtbAart();
mtbAart.setBarCode(row.getCodBarre()); mtbAart.setBarCode(row.getCodBarre());
mtbAart.setDiacod(row.getCodBarre()); mtbAart.setDiacod(row.getCodBarre());
@ -280,7 +280,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
this.onLoadingStarted(); this.onLoadingStarted();
this.viewModel.saveRow(row, resultDTO); this.viewModel.saveRow(row, resultDTO);
}) })
.setOnAbort(this::onLoadingEnded) .setOnAbort(() -> {})
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }
@ -370,16 +370,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
public void showInfoArtDialog() { public void showInfoArtDialog() {
var listaMtbAart = Stream.of(this.viewModel.getProductsList()) var listaMtbAart = Stream.of(this.viewModel.getProductsList())
.map(x -> new MtbAart() .map(x -> new DialogAvailableItemListModel()
.setCodMart(x.getCodMart()) .setCodMart(x.getCodMart())
.setUntMis(x.getUntMis()) .setDescrizioneEstesa(x.getDescrizione()))
.setDescrizione(x.getDescrizione())
.setDescrizioneEstesa(x.getDescrizione())
.setQtaCnf(x.getQtaCnf()))
.toList(); .toList();
new DialogChooseArtFromListaArtsView(false, listaMtbAart, null) for (var documentRow : viewModel.getDocumentRows()) {
.show(getSupportFragmentManager(), "tag"); var codMart = documentRow.getCodMart();
Stream.of(listaMtbAart)
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart))
.forEach(x -> x.setAggiunto(true));
}
new DialogAvailableItemsView(listaMtbAart)
.show(getSupportFragmentManager(), "DialogAvailableInventarioItemsView");
} }
} }

View File

@ -2,6 +2,8 @@ package it.integry.integrywmsnative.gest.inventario;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import com.annimon.stream.Stream;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -65,8 +67,7 @@ public class ElencoInventariViewModel {
this.sendCreateInventarioRequest(inventoryId, zone); this.sendCreateInventarioRequest(inventoryId, zone);
} else { } else {
var matchedInventory = getInventarioList().getValue() var matchedInventory = Stream.of(getInventarioList().getValue())
.stream()
.filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone) && .filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone) &&
!x.isSyncronized()) !x.isSyncronized())
.findFirst() .findFirst()

View File

@ -40,7 +40,8 @@ import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView; import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemsView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView;
@ -238,9 +239,19 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn
public void showAvailableArts() { public void showAvailableArts() {
var listaMtbAart = Stream.of(this.mViewModel.getAvailableArts()) var listaMtbAart = Stream.of(this.mViewModel.getAvailableArts())
.map(InventarioArtDTO::toMtbAart) .map(InventarioArtDTO::toMtbAart)
.map(DialogAvailableItemListModel::fromMtbAart)
.toList(); .toList();
new DialogChooseArtFromListaArtsView(false, listaMtbAart, null) for (var inventoryItem : mViewModel.currentInventarioRows.getValue()) {
.show(getSupportFragmentManager(), "tag"); var codMart = inventoryItem.getCodMart();
Stream.of(listaMtbAart)
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart))
.forEach(x -> x.setAggiunto(true));
}
new DialogAvailableItemsView(listaMtbAart)
.show(getSupportFragmentManager(), "DialogAvailableInventarioItemsView");
} }
} }

View File

@ -0,0 +1,44 @@
package it.integry.integrywmsnative.view.dialogs.available_items;
import it.integry.integrywmsnative.core.model.MtbAart;
public class DialogAvailableItemListModel {
private String codMart;
private String descrizioneEstesa;
private boolean aggiunto;
public boolean isAggiunto() {
return aggiunto;
}
public DialogAvailableItemListModel setAggiunto(boolean aggiunto) {
this.aggiunto = aggiunto;
return this;
}
public String getCodMart() {
return codMart;
}
public DialogAvailableItemListModel setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizioneEstesa() {
return descrizioneEstesa;
}
public DialogAvailableItemListModel setDescrizioneEstesa(String descrizioneEstesa) {
this.descrizioneEstesa = descrizioneEstesa;
return this;
}
public static DialogAvailableItemListModel fromMtbAart(MtbAart mtbAart) {
return new DialogAvailableItemListModel()
.setCodMart(mtbAart.getCodMart())
.setDescrizioneEstesa(mtbAart.getDescrizioneEstesa());
}
}

View File

@ -0,0 +1,65 @@
package it.integry.integrywmsnative.view.dialogs.available_items;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import java.util.List;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class DialogAvailableItemsView extends BaseDialogFragment {
private final List<DialogAvailableItemListModel> mListaArts;
public DialogAvailableItemsView(List<DialogAvailableItemListModel> listaArts) {
super();
this.mListaArts = listaArts;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
var binding = DialogChooseArtFromListaArtBinding.inflate(LayoutInflater.from(requireContext()));
binding.titleText.setText(R.string.articoli_disponibili);
initRecyclerView(binding, mListaArts);
var alertDialog = new MaterialAlertDialogBuilder(requireContext())
.setView(binding.getRoot())
.setCancelable(false)
.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setOnShowListener(this);
return alertDialog;
}
private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<DialogAvailableItemListModel> dataset) {
binding.itemsList.setHasFixedSize(true);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider));
binding.itemsList.addItemDecoration(itemDecorator);
new LiveAdapter(dataset, BR.item)
.map(DialogAvailableItemListModel.class, R.layout.dialog_available_intventario_items__item_model)
.into(binding.itemsList);
}
}

View File

@ -31,7 +31,7 @@ public class DialogChooseArtFromListaArtsAdapter extends RecyclerView.Adapter<Di
} }
public void bind(MtbAart mtbAart) { public void bind(MtbAart mtbAart) {
mViewDataBinding.setMtbAart(mtbAart); mViewDataBinding.setItem(mtbAart);
mViewDataBinding.executePendingBindings(); mViewDataBinding.executePendingBindings();
} }
} }

View File

@ -59,13 +59,13 @@ public class DialogChooseArtFromListaArtsView extends BaseDialogFragment {
} }
private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<MtbAart> dataset) { private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<MtbAart> dataset) {
binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); binding.itemsList.setNestedScrollingEnabled(false);
binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); binding.itemsList.setHasFixedSize(true);
binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(requireContext())); binding.itemsList.setLayoutManager(new LinearLayoutManager(requireContext()));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider)); itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider));
binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); binding.itemsList.addItemDecoration(itemDecorator);
IRecyclerItemClicked<MtbAart> onItemClickListener = (item, position) -> { IRecyclerItemClicked<MtbAart> onItemClickListener = (item, position) -> {
if (mOnItemChoosed != null) { if (mOnItemChoosed != null) {
@ -77,7 +77,7 @@ public class DialogChooseArtFromListaArtsView extends BaseDialogFragment {
DialogChooseArtFromListaArtsAdapter mCurrentAdapter = new DialogChooseArtFromListaArtsAdapter( DialogChooseArtFromListaArtsAdapter mCurrentAdapter = new DialogChooseArtFromListaArtsAdapter(
requireContext(), dataset, this.mEnableSelection ? onItemClickListener : null); requireContext(), dataset, this.mEnableSelection ? onItemClickListener : null);
binding.dialogChooseArtFromListaArtMainList.setAdapter(mCurrentAdapter); binding.itemsList.setAdapter(mCurrentAdapter);
} }
} }

View File

@ -32,7 +32,7 @@ public class DialogChooseArtFromListaMtbColrAdapter extends RecyclerView.Adapter
} }
public void bind(MtbAart mtbAart) { public void bind(MtbAart mtbAart) {
mViewDataBinding.setMtbAart(mtbAart); mViewDataBinding.setItem(mtbAart);
mViewDataBinding.executePendingBindings(); mViewDataBinding.executePendingBindings();
} }
} }

View File

@ -55,18 +55,18 @@ public class DialogChooseArtFromListaMtbColrView {
} }
private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<MtbColr> dataset) { private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<MtbColr> dataset) {
binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); binding.itemsList.setNestedScrollingEnabled(false);
binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); binding.itemsList.setHasFixedSize(true);
binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); binding.itemsList.setLayoutManager(new LinearLayoutManager(currentContext));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(currentContext, SimpleDividerItemDecoration.VERTICAL); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(currentContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider));
binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); binding.itemsList.addItemDecoration(itemDecorator);
currentAdapter = new DialogChooseArtFromListaMtbColrAdapter(currentContext, dataset, onItemClicked); currentAdapter = new DialogChooseArtFromListaMtbColrAdapter(currentContext, dataset, onItemClicked);
binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter); binding.itemsList.setAdapter(currentAdapter);
} }
private IRecyclerItemClicked<MtbColr> onItemClicked = (item, position) -> { private IRecyclerItemClicked<MtbColr> onItemClicked = (item, position) -> {

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M21.2,12l0.6,-1.9c0.5,-1.4 -0.2,-3 -1.5,-3.7l-1.8,-0.9l-0.9,-1.8c-0.7,-1.3 -2.2,-2 -3.7,-1.5L12,2.8l-1.9,-0.6c-1.4,-0.5 -3,0.2 -3.7,1.5L5.5,5.5L3.7,6.4c-1.3,0.7 -2,2.2 -1.5,3.7L2.8,12l-0.6,1.9c-0.5,1.4 0.2,3 1.5,3.7l1.8,0.9l0.9,1.8c0.7,1.3 2.3,2 3.7,1.5l1.9,-0.6l1.9,0.6c1.4,0.5 3,-0.2 3.7,-1.5l0.9,-1.8l1.8,-0.9c1.3,-0.7 2,-2.2 1.5,-3.7L21.2,12zM11,16.4l-3.7,-3.7l1.4,-1.4l2.3,2.3l5.3,-5.3l1.4,1.4L11,16.4z"
android:fillColor="#2e7d32"/>
<path
android:pathData="M11,16.4l-3.7,-3.7l1.4,-1.4l2.3,2.3l5.3,-5.3l1.4,1.4z"
android:fillColor="#FFFFFF"/>
</vector>

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<variable
name="item"
type="it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel" />
</data>
<RelativeLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="vertical"
android:paddingBottom="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_mart_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/already_inventariato"
android:text="@{item.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginTop="8dp"
tools:text="COD MART" />
<RelativeLayout
android:id="@+id/already_inventariato"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:visibility="@{item.aggiunto ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/already_inventariato_text"
style="@style/AppTheme.NewMaterial.Text.ExtraSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="-12dp"
android:layout_toEndOf="@id/already_inventariato_icon"
android:paddingEnd="4dp"
android:background="@drawable/badge_round_corner_without_padding"
android:backgroundTint="@color/green_800"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:text="Aggiunto"
android:textColor="@android:color/white" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/already_inventariato_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/ic_verified_account__green_800" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cod_mart_label"
android:ellipsize="end"
android:text="@{item.descrizioneEstesa}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
</RelativeLayout>
</layout>

View File

@ -35,9 +35,11 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/dialog_choose_art_from_lista_art__main_list" android:id="@+id/items_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/dialog_choose_art_from_lista_art__item_model" tools:listitem="@layout/dialog_choose_art_from_lista_art__item_model"
tools:itemCount="5"/> tools:itemCount="5"/>

View File

@ -6,13 +6,11 @@
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" /> <import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" /> <import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<variable <variable
name="mtbAart" name="item"
type="it.integry.integrywmsnative.core.model.MtbAart" /> type="it.integry.integrywmsnative.core.model.MtbAart" />
</data> </data>
@ -37,7 +35,7 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@{mtbAart.codMart}" android:text="@{item.codMart}"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:textSize="14sp" android:textSize="14sp"
android:textStyle="bold" android:textStyle="bold"
@ -47,11 +45,11 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:text="@{mtbAart.diacod}" android:text="@{item.diacod}"
android:textColor="@color/red_600" android:textColor="@color/red_600"
android:textSize="14sp" android:textSize="14sp"
android:textStyle="bold" android:textStyle="bold"
android:visibility="@{UtilityString.isNullOrEmpty(mtbAart.diacod) ? View.GONE : View.VISIBLE}" android:visibility="@{UtilityString.isNullOrEmpty(item.diacod) ? View.GONE : View.VISIBLE}"
tools:text="DIACOD" /> tools:text="DIACOD" />
</RelativeLayout> </RelativeLayout>
@ -60,7 +58,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end" android:ellipsize="end"
android:text="@{mtbAart.descrizioneEstesa}" android:text="@{item.descrizioneEstesa}"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textSize="16sp" android:textSize="16sp"
tools:text="Descrizione lunga articolo" /> tools:text="Descrizione lunga articolo" />