2017-12-18 14 views
0

recyclerView에서 클릭하면 특정 버튼의 배경 이미지를 변경하려고합니다. 버튼의 배경 이미지가 제대로 바뀌고 있지만 8th.16th..etc 행에있는 버튼의 배경도 바뀌고 있습니다. (나는 현재 사용하여 재활용 뷰에 데이터를 채우는하고 테스트를위한 루프)recyclerview에서 특정 버튼에 액세스하여 배경 이미지를 변경하십시오.

내 코드는 배경이 때문에 자사의 RecyclerView 변화

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

    firstlistitem listItem = listItems.get(position); 

    holder.itemView.setTag(position); 
    holder.btnBookMark.setTag(position); 

    holder.btnBookMark.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) {     
    holder.btnBookMark.setBackgroundResource(R.drawable.bookmarkred); 
      } 
    }); 
} 
+0

그래서 목록의 8 번째, 16 번째 등 모든 항목의 배경을 변경하고 싶습니까? – Gautam

+0

Gautam 없음. 버튼의 배경만을 변경하고 싶습니다. 그러나이 코드는 눌려진 버튼의 배경을 바꾸고 있습니다. 그리고 8 번과 16 번 –

+0

괜찮습니다. recyclerview는보기를 재사용하므로 배경색과 배경색이 다시 변경되어 사용자가 동일한 색상을 보게되므로보기가 변경되었습니다. 그래서 이것을 처리하기 위해 객체를 사용하여 상태를 유지하거나 drawable에 mutate()를 사용하십시오 – Gautam

답변

0

을하고 그것을보기를 리사이클하고 다시 사용합니다. 따라서 여덟 번째 위치를 클릭하고 아래로 스크롤하면 다른 위치에 대한 사용자 정의 배경으로 8 위치에서 항목을 재사용하고 있습니다. 이 때문에 스크롤의 나중 항목에 대한 사용자 정의 배경을 얻게됩니다.

배경이 변경 될 많은 항목이있는 경우이 작업을 수행하십시오.

class ViewHolder extends RecyclerView.ViewHolder{ 
    boolean newBackground = false; 
    Button button 

    ViewHolder(View itemView){ 
     ... 
     button.setOnClickListner((v) - > newBackground = true); 
    } 
} 

는 그런 다음 newBackground의 값을 확인하고 배경이 한 번에 변경됩니다 그 중 하나의 항목 만있을 경우 다음 어댑터에서 필드를 선언 할 수 onBindViewHolder()

의 배경을 설정할 수 있습니다 그 배경을 변경하려면 확인하십시오.

class MyAdapter extends RecyclerView.Adapter<ViewHolder>{ 

    int newBackgroundPos = -1; 

    @Override 
    public final void onBindViewHolder(ViewHolder holder, int position) { 
     holder.button.setOnClickListener((v) -> newBackGroundPos = position); 

     if(position == newBackgroundPos) 
      holder.itemView.setBackground(newBackground); 
     else 
      holder.itemView.setBackground(normalBackground); 
    } 
} 
+0

Saran에게 답변 해 주셔서 감사합니다. 나는 당신의 방법대로 그것을 시도하고 당신의 대답으로 돌아갈 것입니다. –

+0

@SinanNoureddine 예상 출력을 얻었습니까? –

+0

람다 표현이이 언어 수준에서 지원되지 않는다는 오류가있어서 해결책이 작동하지 않을까 걱정됩니다. 그러나 나는 그것이 배열과 같은 크기로 배열을 생성하여 작동하게 만들 수 있었고 배열의 모든 색인에서 배경을 바꿀 지 여부를 확인했습니다. –