0

我有問題,當我點擊來增加位置的第一個項目的數量,當我scolling向下和向上的話,該項目的位置閃爍......滾動時RecyclerView,定製視圖值是不斷變化的

請幫助我提前謝謝你們

這是我的適配器類。

package growcia.malacus.com.growcia.adapter; 

import android.content.Context; 
import android.content.DialogInterface; 
import android.graphics.Typeface; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.squareup.picasso.Picasso; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.List; 

import growcia.malacus.com.growcia.R; 
import growcia.malacus.com.growcia.activity.ProductListActivity; 
import growcia.malacus.com.growcia.database.SqliteDatabaseClass; 
import growcia.malacus.com.growcia.model.SellerProductPOJO; 



public class ProductListAdapter extends RecyclerView.Adapter<ProductListAdapter.ViewHolder> { 

public Context context; 
SqliteDatabaseClass DB; 
String productCode; 
boolean isPressed = false; 
int count = 0; 
int qty; 


public String pname, price, img_path; 
static int productItem = 0; 
int totPrice; 

ProductListActivity objProductList; 
List<SellerProductPOJO> productListDetails; 


public ProductListAdapter(List<SellerProductPOJO> productDetails, Context context) { 
    super(); 

    DB = new SqliteDatabaseClass(context); 
    objProductList = new ProductListActivity(); 
    this.productListDetails = productDetails; 
    this.context = context; 
} 


@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_product, parent, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, final int position) { 

    final SellerProductPOJO objSellerProductPOJO = productListDetails.get(position); 

    try { 
     JSONArray jar = DB.getAllProductCodeAndQtyProductList(); 
     Log.e("total pid and qty ad : ", "" + jar.toString()); 

     for (int i = 0; i < jar.length(); i++) { 
      JSONObject job = jar.getJSONObject(i); 

      String cart_productId = job.getString("ProductCode"); 
      String productQty = job.getString("QuantityOrdered"); 

      Log.e("id and qty: ", cart_productId + " qty: " + productQty); 

      String plist_prod_id = productListDetails.get(position).getProductCode(); 

      Log.e("product id in cart : ", "" + cart_productId.toString()); 
      Log.e("product id service : ", "" + plist_prod_id.toString()); 

     } 

    } catch (JSONException J) { 
     J.printStackTrace(); 
    } 


    String url = objSellerProductPOJO.getImagePath(); 
    Picasso.with(context) 
      .load(url) 
      .placeholder(R.drawable.placeholder) // optional 
      .error(R.drawable.error) // optional 
      .resize(100, 100)      // optional 
      .into(holder.ivProduct); 
    holder.tvProductName.setText(objSellerProductPOJO.getProductName()); 
    holder.tvUnit.setText(objSellerProductPOJO.getAvailableQuantity()); 
    holder.tvPrice.setText(objSellerProductPOJO.getPrice()); 

    Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/abc.ttf"); 
    holder.tvProductName.setTypeface(font); 
    holder.tvUnit.setTypeface(font); 
    holder.tvPrice.setTypeface(font); 


    if (context instanceof ProductListActivity) 
     totPrice = DB.getSumPrice(); 
    Log.e("all price insert : ", "" + totPrice); 
    count = DB.getProfilesCount(); 
    Log.e("count from db", "" + count); 
    ((ProductListActivity) context).showCartItem(count, totPrice); 



    holder.btnPlus.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      SellerProductPOJO objSellerProduct = productListDetails.get(position); 


      String stock = holder.tvUnit.getText().toString(); 
      int qtyMiddle = Integer.parseInt(holder.tvQty.getText().toString()); 
      int qtyStock = Integer.parseInt(objSellerProduct.getAvailableQuantity().toString()); 


      if (!stock.equalsIgnoreCase("0")) { 

       if (qtyMiddle < qtyStock) { 


        pname = objSellerProduct.getProductName(); 
        img_path = objSellerProduct.getImagePath(); 
        price = objSellerProduct.getPrice(); 
        productCode = objSellerProduct.getProductCode(); 


        String str_qty = holder.tvQty.getText().toString(); 
        int qty = Integer.parseInt(str_qty); 

        qty = qty + 1; 
        String final_str_qty = "" + qty; 


        objSellerProductPOJO.setQty(final_str_qty); 
        holder.tvQty.setText(objSellerProductPOJO.getQty() + ""); 

        int reduceable_stock = qtyStock - qty; 

        holder.tvUnit.setText(reduceable_stock + ""); 

        if (qty > 0) { 
         boolean entryStatus = DB.Exists(productCode); 
         if (entryStatus) { 

          productItem = productItem + 1; 
          String str_newQty = holder.tvQty.getText().toString(); 
          int newqty = Integer.parseInt(str_newQty); 
          double intPrice = Double.parseDouble(price); 
          double totPrice = qty * intPrice; 
          DB.updateProductQty(productCode, newqty, totPrice); 
          totPrice = DB.getSumPrice(); 
          Log.e("all price update: ", "" + totPrice); 

         } else { 
          productItem = 1; 
          DB.addProductItem(productCode, pname, img_path, productItem, price, price); 

         } 
         if (context instanceof ProductListActivity) 
          totPrice = DB.getSumPrice(); 
         Log.e("all price insert : ", "" + totPrice); 
         count = DB.getProfilesCount(); 
         Log.e("count from db", "" + count); 
         ((ProductListActivity) context).showCartItem(count, totPrice); 
        } 


       } else { 
        Toast.makeText(context, "Product out of stock!!", Toast.LENGTH_SHORT).show(); 
       } 

      } 

     } 
    }); 

    holder.btnMinus.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      String stock = holder.tvUnit.getText().toString(); 
      if (!stock.equalsIgnoreCase("0")) { 

       SellerProductPOJO objSellerProductDeduct = productListDetails.get(position); 

       String str_qty = holder.tvQty.getText().toString(); 
       int qty = Integer.parseInt(str_qty); 

       if (qty != 0) { 

        int qtyStockMinusClick = Integer.parseInt(holder.tvUnit.getText().toString()); 

        holder.tvUnit.setText((qtyStockMinusClick + 1) + ""); 



        Log.e("btnMinus", "" + qty); 

        if (qty == 1) { 
         Log.e("", "inside 0 qty"); 
         DB.delete_byID(productCode); 
         qty = qty - 1; 
         String final_str_qty = "" + qty; 

         objSellerProductPOJO.setQty(final_str_qty); 
         holder.tvQty.setText(objSellerProductPOJO.getQty()+""); 


        } else { 

         qty = qty - 1; 
         String final_str_qty = "" + qty; 

         objSellerProductPOJO.setQty(final_str_qty); 
         holder.tvQty.setText(objSellerProductPOJO.getQty()+""); 


         double intPrice = Double.parseDouble(price); 
         double totPrice = qty * intPrice; 

         DB.updateProductQty(productCode, qty, totPrice); 
        } 

        if (context instanceof ProductListActivity) 
         totPrice = DB.getSumPrice(); 
        Log.e("all price insert : ", "" + totPrice); 
        count = DB.getProfilesCount(); 
        Log.e("count from db", "" + count); 
        ((ProductListActivity) context).showCartItem(count, totPrice); 

       } 
      } else { 
       Toast.makeText(context, "Product out of stock!!", Toast.LENGTH_SHORT).show(); 
      } 
      notifyDataSetChanged(); 
     } 
    }); 


    holder.imagefavorite.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Log.e("position", "all position" + position); 
      if (isPressed) 
       holder.imagefavorite.setBackgroundResource(R.drawable.ic_not_favourite); 
      else 
       holder.imagefavorite.setBackgroundResource(R.drawable.favourite_icon); 

      isPressed = !isPressed; 
     } 
    }); 

} 

@Override 
public int getItemViewType(int position) { 
    return super.getItemViewType(position); 
} 


@Override 
public int getItemCount() { 
    return productListDetails.size(); 
} 



class ViewHolder extends RecyclerView.ViewHolder { 

    public TextView tvProductName; 
    public TextView tvUnit; 
    public TextView tvPrice; 
    public TextView tvQty; 
    public ImageView ivProduct; 
    public ImageView imagefavorite; 
    // public EditText edqntiry; 
    public Button btnPlus; 
    public Button btnMinus; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     ivProduct = (ImageView) itemView.findViewById(R.id.ivProduct); 
     tvProductName = (TextView) itemView.findViewById(R.id.tvProductName); 
     tvUnit = (TextView) itemView.findViewById(R.id.tvUnit); 
     tvPrice = (TextView) itemView.findViewById(R.id.tvPrice); 
     tvQty = (TextView) itemView.findViewById(R.id.tvQty); 
     btnPlus = (Button) itemView.findViewById(R.id.btnPlus); 
     btnMinus = (Button) itemView.findViewById(R.id.btnMinus); 
     imagefavorite = (ImageView) itemView.findViewById(R.id.imagefavorite); 
    } 

} 
} 

當我要incerase然後在下面的屏幕數量顯示

enter image description here

當我滾動向下和向上然後在下面的屏幕顯示

enter image description here

+0

你是什麼意思*該項目的位置flicurring *? – Abbas

+0

看到上面的兩個圖像... – Vijay

+0

第一個圖像在滾動之前,而下一個在滾動之後 – Vijay

回答

2

你是不是在onBindViewHolder方法中設置holder.tvQty的初始值。

當您更新holder.tvQty的holder.btnPlus或holder.btnMinus聽衆的價值,你應該保存在某個地方該值在objSellerProductPOJO:

holder.tvPrice.setText(objSellerProductPOJO.getPrice()); 

objSellerProductPOJO.setQty(final_str_qty) 

然後add:

holder.tvQty.setText(objSellerProductPOJO.getQty()); 
+0

感謝您的回覆朋友 我做了同樣的事情,但同樣的問題。 – Vijay

+0

歡迎..你能更新你的問題與你試過嗎? –

+0

我已更新相同.. – Vijay

0

您需要更新關於add或subtra的productListDetails變量ct

holder.tvQty.setText(final_str_qty);

,並通知使用適配器notifydatasetchange()

+0

感謝您的回覆... – Vijay

+0

但我仍然嘗試相同的問題。 – Vijay

0

在你的onClick()方法,替換與getAdapterPosition()的onBindViewHolder()方法的位置參數。

SellerProductPOJO objSellerProduct = productListDetails.get(position); 
SellerProductPOJO objSellerProductDeduct = productListDetails.get(position); 

替換爲

SellerProductPOJO objSellerProduct = productListDetails.get(getAdapterPosition()); 
SellerProductPOJO objSellerProductDeduct = productListDetails.get(getAdapterPosition()); 
相關問題