我有customrecycleAdapter,当我单击元素时,我会更改行的颜色,但是如果我滚动查看背景更改位置或出现在其他元素上。我已经阅读过Receycle的观点,但是,解决此问题的方法是什么?
我的适配器是:
public class CustomRecycleAdapter extends RecyclerView.Adapter<CustomRecycleAdapter.ViewHolder> {
private JSONArray dataSource;
private AdapterCallback mAdapterCallback;
public static SparseBooleanArray selectedItems;
public CustomRecycleAdapter(JSONArray dataArgs, Context context){
dataSource = dataArgs;
this.mAdapterCallback = ((AdapterCallback) context);
}
public static interface AdapterCallback {
void onMethodCallback(View caller, JSONObject obj, JSONArray data, int position);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_view_activities, parent, false);
ViewHolder viewHolder = new ViewHolder(view, new CustomRecycleAdapter.ViewHolder.IMyViewHolderClicks() {
public void onClick(View caller, int position) {
try {
JSONObject itemClicked = dataSource.getJSONObject(position);
mAdapterCallback.onMethodCallback(caller, itemClicked, dataSource, position);
// Log.e("clicked", itemClicked.toString());
} catch (JSONException e) {
e.printStackTrace();
}
};
});
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
try {
JSONObject object = dataSource.getJSONObject(position);
holder.textView.setText(object.getString("description"));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return dataSource.length();
}
public JSONObject getItem(int position) throws JSONException {
return dataSource.getJSONObject(position);
}
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public IMyViewHolderClicks mListener;
public TextView textView;
public TextView hours;
public ViewHolder(View itemView, IMyViewHolderClicks listener) {
super(itemView);
mListener = listener;
textView = (TextView) itemView.findViewById(R.id.activity);
hours = (TextView) itemView.findViewById(R.id.hours);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Log.e("RecycleAdapterPosition", String.valueOf(getAdapterPosition()));
// mListener.onClick(v, position);
v.setBackgroundColor(Color.GREEN);
v.setSelected(true);
}
public interface IMyViewHolderClicks {
public void onClick(View caller, int position);
}
}
}
因此,我单击了element,然后正确设置了setBackground,但是如果滚动,则会看到另一个设置了背景的元素,并且如果向上滚动我选择的元素,则没有背景。
RecyclerView重用视图来绘制将要显示的列表的下一个元素,因此该视图集具有新数据,但继续具有旧样式,因为您会看到列表中的其他元素具有新颜色。
您应该创建一个数组,存储是否检查此元素,然后检查是否在onBindViewHolder()
调用时检查了该元素
@Override
public void onBindViewHolder(final YourViewHolder holder, final int position) {
if(checked[position]){
//YourViewHolder change colour
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句