recyclerview에서 선택한 항목의 상태를 설정하려고합니다. UI는 단일 셀 framelayout 하나 drawable xml의 배경을 다른 셀로 변경하여 수행합니다. 다음Drawable Recyclerview 배경 변경 느리게, 주 스레드에서 너무 많은 작업을 수행하는 중 오류가 발생했습니다.
@Override
public void onBindViewHolder(final DeviceAlarmTonesHolder holder, final int position) {
final DeviceAlarmTone alarmTone = alarmTones.get(position);
// set click listener
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.alarmTonesButtonBackground.setBackgroundResource(R.drawable.layout_bg_selected);
itemClickListener.onItemClicked(holder, alarmTone, position, oldPostion);
// Refresh the ui for the previous button
if (oldPostion != -1){
notifyItemChanged(oldPostion);
}
oldPostion = position;
}
});
String alarmToneString = alarmTones.get(position).getNotificationTitle();
holder.alarmTonesNameTextView.setText(alarmToneString);
}
현재 항목의 onclick을 내가 변화하고 배경에서 기본적으로
다시 선택 해제의 배경을 되돌릴 이전 항목 notifyitemchanged 부르심 다음 recyclerview에서
는이 같은 변화가 만들어 onBindViewHolder.선택하지 않은 배경 :
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#212121"/>
<corners android:radius="10dip"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>
선정 backgound에 : 당신의 도움에 미리
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#0091EA"/>
<corners android:radius="10dip"/>
<padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
</shape>
감사 변경되는
배경은 다음과 같이 XML을 드로어 블 있습니다. 난 그냥 문제가 거기에서 발생 여부를 확인하기 위해 이전 배경을 업데이트
public class DeviceAlarmToneAdapter extends RecyclerView.Adapter<DeviceAlarmTonesHolder>{
Context context;
ArrayList<DeviceAlarmTone> alarmTones;
DeviceAlarmToneClickListener itemClickListener;
int oldPostion = -1;
public DeviceAlarmToneAdapter(Context context, ArrayList<DeviceAlarmTone> alarmTones, DeviceAlarmToneClickListener itemClickListener) {
this.context = context;
this.alarmTones = alarmTones;
this.itemClickListener = itemClickListener;
}
@Override
public DeviceAlarmTonesHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.singlecell_devicealarmtoneslist, parent, false);
DeviceAlarmTonesHolder holder = new DeviceAlarmTonesHolder(v, context);
return holder;
}
@Override
public void onBindViewHolder(final DeviceAlarmTonesHolder holder, final int position) {
final DeviceAlarmTone alarmTone = alarmTones.get(position);
// set click listener
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.alarmTonesButtonBackgroundUnselected.setVisibility(View.INVISIBLE);
holder.alarmTonesButtonBackgroundSelected.setVisibility(View.VISIBLE);
itemClickListener.onItemClicked(holder, alarmTone, position, oldPostion);
// Refresh the ui for the previous button
if (oldPostion != -1){
notifyItemChanged(oldPostion);
}
oldPostion = position;
}
});
String alarmToneString = alarmTones.get(position).getNotificationTitle();
holder.alarmTonesNameTextView.setText(alarmToneString);
}
@Override
public int getItemCount() {
return alarmTones.size();
}
}
뷰 유형에 따라보기 항목을 재활용 뷰의 유형을 확인하고 렌더링합니다. – Manikanta
괜찮아요. bI 감사합니다. –
전체 어댑터를 게시하십시오. –