Ich habe customrecycleAdapter und wenn ich auf Element klicken, würde ich Farbe der Zeile ändern, aber wenn ich scroll Ansicht Hintergrund Position ändern oder auf anderen Element angezeigt. Ich habe über Recycle der Ansicht gelesen, aber so, Was ist Workoround für dieses Problem?Wiederholen Sie Hintergrund auf Element mit Scroll RecycleAdapter und scrollen
mein Adapter ist:
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);
}
}
}
ich auf Element So klicken und corretly setBackground, aber wenn ich scrollen, ich sehe ein anderes Element mit Hintergrund gefassten und wenn ich scrollen mein Element nach oben, dass ich ausgewählt, haven nicht Hintergrund.
Dies ist ein Vorteil der Trennung von Modell und Ansicht aufgerufen wird. Wenn Sie auf klicken, sollte ein Controller das Modell (dh den Index in einem Array) aktualisieren, dann sollte das aktualisierte Modell eine Aktualisierung der Ansichtsebene (dh des Adapters) auslösen, die dann das Modell (den Farbwert) zum Rendern der richtigen Hintergrundfarbe verwenden kann . – FishStix