Я пытаюсь построить простую задачу, используя DataBinding (в Java) без какого-либо шаблона проектирования. Сценарий состоит в том, что существует RecyclerView, в котором элементы / продукты связываются из HardCoded List Всякий раз, когда пользователь нажимает на любой элемент , он должен показывать, что специфицирует c элемент на левой (пустой) стороне со значениями (свойствами) по умолчанию. Теперь, когда пользователь нажимает на этот левый элемент , его свойства (количество, цена и т. Д. c.) Должны быть изменены (только в этом левом поле ). Теперь все идет хорошо. Проблема в том, что после изменения свойств левого элемента каждый раз, когда пользователь снова нажимает на тот же элемент (который он щелкнул ранее), он показывает элемент с измененными значениями на левой стороне. Но я хочу, чтобы при повторном нажатии он показывал элемент со значениями по умолчанию. Я прикрепил все классы и скриншоты. Пожалуйста, идентифицируйте меня, если я делаю что-то не так.
Product. java
public class Product {
private String title;
private String price;
private String image;
private String quantity;
private String discount;
public Product(String title, String price, String image, String quantity, String discount) {
this.title = title;
this.price = price;
this.image = image;
this.quantity = quantity;
this.discount = discount;
}
//Getters and Setters
}
MainTestActivity. java
public class MainTestActivity extends AppCompatActivity implements ProductsListAdapter.ProductItemClickListener{
ActivityMainTestingBinding binding;
private Product myCurrentProduct;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main_testing);
getItems();
}
private void getItems(){
List<Product> products = new ArrayList<>();
products.add(new Product("Black Grapes", "480", "", "1", "0"));
products.add(new Product("Oranges", "198", "", "1", "0"));
products.add(new Product("Pears", "170", "", "1", "0"));
products.add(new Product("Apple", "169", "", "1", "0"));
products.add(new Product("Jonagold", "110", "", "1", "0"));
products.add(new Product("Lemon", "198", "", "1", "0"));
binding.rvProductList.setLayoutManager(new GridLayoutManager(this, 5));
binding.rvProductList.setAdapter(new ProductsListAdapter(products, this));
}
@Override
public void onProductItemClicked(Product product) {
myCurrentProduct = product;
binding.setPopUpProduct(myCurrentProduct);
binding.cvCurrentProduct.setVisibility(View.VISIBLE);
binding.cvCurrentProduct.setOnClickListener(v -> {
myCurrentProduct.setDiscount("100");
myCurrentProduct.setPrice("50000");
myCurrentProduct.setQuantity("5");
myCurrentProduct.setTitle("Null");
binding.setPopUpProduct(myCurrentProduct);
});
}
}
ProductsListAdapter. java
public class ProductsListAdapter extends RecyclerView.Adapter<ProductsListAdapter.ViewHolder> {
private ProductItemClickListener mListener;
private List<Product> products;
public ProductsListAdapter(List<Product> products, ProductItemClickListener mListener) {
this.products = products;
this.mListener = mListener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
ItemListProductsBinding binding = DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.item_list_products, viewGroup, false);
return new ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int i) {
holder.bind(products.get(i), mListener);
}
@Override
public int getItemCount() {
return products.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ItemListProductsBinding binding;
public ViewHolder(ItemListProductsBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
void bind(Product currentProduct, ProductItemClickListener clickListener){
//For each item, corresponding product object is passed to the binding
binding.setProduct(currentProduct);
binding.setProductItemClick(clickListener);
//This is to force bindings to execute right away
binding.executePendingBindings();
}
}
public interface ProductItemClickListener {
void onProductItemClicked(Product product);
}
}
activity_main_testing. xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="popUpProduct"
type="tech.oratier.parlour.models.Product" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<com.google.android.material.card.MaterialCardView
android:id="@+id/cvCurrentProduct"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
app:cardCornerRadius="5dp"
app:cardElevation="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher_round" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:hint="Product Title"
android:text="@{popUpProduct.title}"
android:textSize="30sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:text="Quantity:"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:gravity="end"
android:text="@{popUpProduct.quantity}"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:text="Discount:"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:gravity="end"
android:text="@{popUpProduct.discount}"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:text="Price:"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:gravity="end"
android:text="@{popUpProduct.price}"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/seperator" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:text="Total"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/garamond"
android:gravity="end"
android:text="@{popUpProduct.price != null ? (popUpProduct.quantity != null ? (popUpProduct.discount != null ? String.valueOf((Double.parseDouble(popUpProduct.price) * Double.parseDouble(popUpProduct.quantity)) - Double.parseDouble(popUpProduct.discount)) : String.valueOf(Double.parseDouble(popUpProduct.price) * Double.parseDouble(popUpProduct.quantity))) : @string/nothing) : @string/nothing}"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
<View
android:layout_width="3dp"
android:layout_height="match_parent"
android:background="@color/seperator" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvProductList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</LinearLayout>
</LinearLayout>
item_list_products. xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="product"
type="tech.oratier.parlour.models.Product" />
<variable
name="productItemClick"
type="tech.oratier.parlour.adapters.ProductsListAdapter.ProductItemClickListener" />
</data>
<com.google.android.material.card.MaterialCardView
android:layout_marginTop="5dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:onClick="@{()->productItemClick.onProductItemClicked(product)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:contentPaddingRight="5dp"
android:orientation="vertical">
<LinearLayout
android:paddingStart="16dp"
android:paddingRight="16dp"
android:paddingEnd="16dp"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="100dp"
android:layout_height="wrap_content">
<ImageView
android:layout_marginTop="8dp"
android:src="@mipmap/ic_launcher_round"
android:layout_width="100dp"
android:layout_height="100dp"/>
<TextView
android:fontFamily="@font/garabd"
android:paddingLeft="8dp"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:paddingRight="8dp"
android:background="@color/priceBackground"
android:textColor="@color/defaultTextColor"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="@{product.price}"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<com.google.android.material.textview.MaterialTextView
android:singleLine="true"
android:textSize="20sp"
android:textColor="@android:color/black"
android:fontFamily="@font/raleway_regular"
android:layout_marginTop="8dp"
android:layout_gravity="center_horizontal"
android:text="@{product.title}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.google.android.material.textview.MaterialTextView
android:singleLine="true"
android:textSize="20sp"
android:textColor="@android:color/black"
android:fontFamily="@font/raleway_regular"
android:layout_marginTop="8dp"
android:layout_gravity="center_horizontal"
android:text="@{product.quantity}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>