2017-12-25 36 views
2

notifyDataSetChanged()setText의 값을 onBindViewHolder 안에있는 TextView 값으로 사용해야합니다. 나는동일한 onclick 메서드 내에서 notifyDataSetChanged 및 setText를 사용하는 방법

qtyIncrease.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      quantityText.setText("Good"); 
      toatlPriceText.setText("250"); 
      notifyDataSetChanged(); 
     } 
    }); 

내 어댑터 클래스,

public class CartCardviewAdapter extends RecyclerView.Adapter<CartCardviewAdapter.MyViewHolder> { 

private Context context; 
private ArrayList<CartCardviewModel> dataSet; 
private ShoppingCart shoppingCart; 

public static class MyViewHolder extends RecyclerView.ViewHolder { 

    TextView itemNameText, itemTypeText, itemDescText, unitPriceText, toatlPriceText, quantityText; 
    ImageView itemImage, removeIcon, qtyIncrease, qtyDecrease; 

    public MyViewHolder(final View itemView) { 
     super(itemView); 

     this.itemNameText = (TextView) itemView.findViewById(R.id.item_name_text); 
     this.itemTypeText = (TextView) itemView.findViewById(R.id.item_type_text); 
     this.itemDescText = (TextView) itemView.findViewById(R.id.item_desc_text); 
     this.unitPriceText = (TextView) itemView.findViewById(R.id.item_unit_price_text); 
     this.toatlPriceText = (TextView) itemView.findViewById(R.id.item_total_price_text); 
     this.quantityText = (TextView) itemView.findViewById(R.id.item_quantity_text); 

     this.itemImage = (ImageView) itemView.findViewById(R.id.item_image); 
     this.removeIcon = (ImageView) itemView.findViewById(R.id.item_remove_icon); 
     this.qtyIncrease = (ImageView) itemView.findViewById(R.id.cart_quantity_increase); 
     this.qtyDecrease = (ImageView) itemView.findViewById(R.id.cart_quantity_decrease); 
    } 
} 

public CartCardviewAdapter(ArrayList<CartCardviewModel> data) { 
    this.dataSet = data; 
} 

@Override 
public CartCardviewAdapter.MyViewHolder onCreateViewHolder(final ViewGroup parent, 
                  int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.cart_cardview_layout, parent, false); 

    CartCardviewAdapter.MyViewHolder myViewHolder = new CartCardviewAdapter.MyViewHolder(view); 

    context = parent.getContext(); 
    return myViewHolder; 
} 

@RequiresApi(api = Build.VERSION_CODES.N) 
@Override 
public void onBindViewHolder(final CartCardviewAdapter.MyViewHolder holder, final int listPosition) { 

    shoppingCart = MainActivity.getCartInstance().getCart(); 

    TextView itemNameText = holder.itemNameText; 
    TextView itemTypeText = holder.itemTypeText; 
    TextView itemDescText = holder.itemDescText; 
    TextView unitPriceText = holder.unitPriceText; 
    final TextView toatlPriceText = holder.toatlPriceText; 
    final TextView quantityText = holder.quantityText; 

    ImageView itemImage = holder.itemImage; 
    ImageView removeIcon = holder.removeIcon; 
    ImageView qtyIncrease = holder.qtyIncrease; 
    ImageView qtyDecrease = holder.qtyDecrease; 

    itemNameText.setText(dataSet.get(listPosition).getItemName()); 
    itemTypeText.setText(dataSet.get(listPosition).getItemType()); 
    itemDescText.setText(dataSet.get(listPosition).getItemDescription()); 
    unitPriceText.setText(String.valueOf(dataSet.get(listPosition).getUnitPrice())); 
    toatlPriceText.setText(String.valueOf(dataSet.get(listPosition).getTotalPrice())); 

    String qty; 
    if (dataSet.get(listPosition).getItemQuantity() < 9) { 
     qty = "0" + String.valueOf(dataSet.get(listPosition).getItemQuantity()); 
    } else { 
     qty = String.valueOf(dataSet.get(listPosition).getItemQuantity()); 
    } 
    quantityText.setText(qty); 

    Picasso.with(context).load(dataSet.get(listPosition).getItemImageUrl()).into(itemImage); 

    removeIcon.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), String.valueOf(listPosition), Toast.LENGTH_SHORT).show(); 
      shoppingCart.removeItem(listPosition); 
      dataSet.remove(listPosition); 
      notifyDataSetChanged(); 
     } 
    }); 

    qtyIncrease.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      shoppingCart.increaseItemQuantity(listPosition); 
      quantityText.setText(String.valueOf(shoppingCart.getItemQuantity(listPosition))); 
      toatlPriceText.setText(String.valueOf(shoppingCart.getTotalPrice(listPosition))); 
      notifyDataSetChanged(); 
     } 
    }); 

    qtyDecrease.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (shoppingCart.getItemQuantity(listPosition) == 1) { 
       Toast.makeText(v.getContext(), "Already Minimum Quantity is Reached", Toast.LENGTH_SHORT).show(); 
      } else { 
       shoppingCart.decreaseItemQuantity(listPosition); 
       quantityText.setText(String.valueOf(shoppingCart.getItemQuantity(listPosition))); 
       toatlPriceText.setText(String.valueOf(shoppingCart.getTotalPrice(listPosition))); 
       notifyDataSetChanged(); 
      } 
     } 
    }); 

} 

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

, onClick 방법 안에 모두 사용하려하지만 모두 클릭에서 작동하지 않습니다. 나는 돌아가서 영향을받은 변화를 보러 와야합니다. 나는 그 문제를 이해할 수 없었다. 클릭이 발동되지 않습니다 나에게

+0

어댑터를 사용하는 데이터 집합을 변경해야합니다. 어댑터 코드 – Raghunandan

+0

을 게시하십시오. – Remario

+2

먼저 notifyDataSetChanged()에 의존하지 마십시오. 너무 비싸고 notifyItemChanged (위치)가 더 저렴합니다. – Remario

답변

0

먼저 "OnBindViewHolder"하지의 ViewHolder 내부의 이미지보기 "qtyIncrease"의 클릭 리스너를 설정해야합니다 지나치게 제한적이라면 라인 아래로 낮은 레벨을 고려하십시오. 이 문제에 접근하는 방법은 여러 가지가 있습니다. 먼저 어댑터를 호스팅하는 리사이클 러에 RecyclerView.OnItemTouchListener을 사용할 수 있습니다. 단일 클릭 및 긴 클릭을 설명하는 자세한 자습서는 Link입니다. 또 다른 접근법은 인터페이스 분리 원리입니다. 어댑터 클래스에서

  1. 는, 하나의 방법
  2. 메소드 서명 (보기보기, INT 위치)과 더불어, 인터페이스를 만들고, 뷰 어댑터에 repective 위치에 클릭 보여줍니다.
  3. 인터페이스
  4. 위에 구현 recylcler보기 인스턴스 클래스를 보자 유형
  5. 의 인터페이스를 허용하도록 생성자를 수정 어댑터
  6. 이 인터페이스의 인스턴스를 선언 생성자의 새 인스턴스를 전달합니다 구현 클래스
  7. 그런 다음 오버라이드 (override) 방법, 인터페이스 인스턴스와 OnClickListener를 설정 한 뷰를 초기화하기 가져옵니다 어댑터 클래스에서, 또한, 텍스트를 변경하고 오 adaptor.notifyItemChanged(position)
  8. 호출합니다.

이 자습서에서는 위에 위의 내용을 정확히 설명합니다. link.

환영합니다!

-1

도와주세요, 당신은 @RequiresApi(api = Build.VERSION_CODES.N)이이 줄

public static class MyViewHolder extends RecyclerView.ViewHolder { 

    TextView itemNameText, itemTypeText, itemDescText, unitPriceText, toatlPriceText, quantityText; 
    ImageView itemImage, removeIcon, qtyIncrease, qtyDecrease; 

    public MyViewHolder(final View itemView) { 
     super(itemView); 

     this.itemNameText = (TextView) itemView.findViewById(R.id.item_name_text); 
     this.itemTypeText = (TextView) itemView.findViewById(R.id.item_type_text); 
     this.itemDescText = (TextView) itemView.findViewById(R.id.item_desc_text); 
     this.unitPriceText = (TextView) itemView.findViewById(R.id.item_unit_price_text); 
     this.toatlPriceText = (TextView) itemView.findViewById(R.id.item_total_price_text); 
     this.quantityText = (TextView) itemView.findViewById(R.id.item_quantity_text); 

     this.itemImage = (ImageView) itemView.findViewById(R.id.item_image); 
     this.removeIcon = (ImageView) itemView.findViewById(R.id.item_remove_icon); 
     this.qtyIncrease = (ImageView) itemView.findViewById(R.id.cart_quantity_increase); 
     this.qtyDecrease = (ImageView) itemView.findViewById(R.id.cart_quantity_decrease); 


     qtyIncrease.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      quantityText.setText("Good"); 
      toatlPriceText.setText("250"); 
      notifyDataSetChanged(); 
     } 
    }); 

}