Android RecyclerView Эффект нажатия кнопки несколько раз при прокрутке
у меня естьRecyclerView
который перечисляет текст и кнопку. Если я нажму кнопку,Toast
текст показывает положение и цвет кнопки изменится на#343434
, Когда я нажимаю кнопку, это работает хорошо, но если я зацикливаюRecyclerView
изменение цвета другой кнопки, но не нажатие, изменение только цвета фона.
Как вы можете видеть ниже GIF: сначала я нажимаю пункт 1 иToast
текст появляется, кнопка смена фона. Затем я переключаюсь вниз, и фон кнопки элемента 15 меняется. Наконец, я прокручиваю вверх до первой позиции, цвет кнопки элемента 1 остается в исходном цвете, а цвет фона кнопки элемента 4 изменяется.
Итак, это мой блок кода:
public class HandleTouchRecyclerViewActivity extends BaseActivity implements ObservableScrollViewCallbacks {
private static final String TAG = HandleTouchRecyclerViewActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_handletouchrecyclerview);
ObservableRecyclerView recyclerView = (ObservableRecyclerView) findViewById(R.id.scroll);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
recyclerView.setScrollViewCallbacks(this);
recyclerView.setAdapter(new CustomAdapter(this, getDummyData()));
}
@Override
public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
Log.v(TAG, "onScrollChanged: scrollY: " + scrollY + " firstScroll: " + firstScroll + " dragging: " + dragging);
}
@Override
public void onDownMotionEvent() {
Log.v(TAG, "onDownMotionEvent");
}
@Override
public void onUpOrCancelMotionEvent(ScrollState scrollState) {
Log.v(TAG, "onUpOrCancelMotionEvent: scrollState: " + scrollState);
}
public static class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private Context mContext;
private LayoutInflater mInflater;
private ArrayList<String> mItems;
public CustomAdapter(Context context, ArrayList<String> items) {
mContext = context;
mInflater = LayoutInflater.from(context);
mItems = items;
}
@Override
public int getItemCount() {
return mItems.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(mContext, mInflater.inflate(R.layout.list_item_handletouch, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.textView.setText(mItems.get(position));
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
Context context;
public ViewHolder(Context context, View view) {
super(view);
this.context = context;
this.textView = (TextView) view.findViewById(android.R.id.text1);
view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
click(getLayoutPosition() + 1,v);
v.setBackgroundColor(Color.parseColor("#343434"))
}
});
}
private void click(int i,View view) {
String message = "Button " + i + " is clicked";
view.setBackgroundColor(Color.parseColor("#343434"));
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
Log.v(TAG, "click: " + message);
}
}
}
}
Итак, как я могу избежать этого? (Скриншоты и коды взяты в AndroidAndroid Observable-ScrollView)