我知道在recyclerview类中没有默认的选择方法,但是我试过以下方式,
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.mTextView.setText(fonts.get(position).getName());
holder.checkBox.setChecked(fonts.get(position).isSelected());
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
for (int i = 0; i < fonts.size(); i++) {
fonts.get(i).setSelected(false);
}
fonts.get(position).setSelected(isChecked);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
尝试这段代码时,我得到了预期的输出,但完全没有.
我将用图像解释这个.
默认情况下,从我的适配器中选择第一个项目

然后我试图选择第二个然后是第三个,然后是第四个,最后是第五个,

这里仅应选择第5个,但所有5个都被选中.
如果我将列表滚动到底部并再次返回顶部,

我得到了我的预期,
我怎样才能克服这个问题?还有一段时间如果我快速滚动列表,其他一些项目就会被选中.如何克服这个问题呢?
更新
notifyDataSetChanged()在fonts.get(position).setSelected(isChecked);我得到以下异常后,我正在尝试使用
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:1462)
at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:2982)
at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:7493)
at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:4338)
at com.app.myapp.screens.RecycleAdapter.onRowSelect(RecycleAdapter.java:111)
Run Code Online (Sandbox Code Playgroud) 滚动后回收器视图项目颜色更改重复。
我曾经在 Recyclerview 列表的特定位置更改颜色。当滚动发生时,底部的另一个项目有相同的变化。它正在重复。如何解决这个问题?
holder.recycle_Listing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemListener.connectionClicked(v,position, itemtype);
holder.mainlayout.setBackgroundColor(Color.parseColor("#e927a4d1"));
}
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 recyclerview 方法上实现此方法更改recyclerview中所选项目的背景颜色
我正确地遵循了脚本,它以我想要的方式工作。是的,它会改变颜色,但每次我单击该项目时,它似乎都在不断添加新数据。我正在使用 2 recyclerview。
我在第一个 recyclerview 上的方法调用了另一个方法来再次绘制一个 recyclerview。就像当我们调用第一个 recyclerview 时,它也调用了第二个 recyclerview。
这是我的脚本:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.viewItem.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,true);
holder.viewItem.setLayoutManager(layoutManager);
HoriSpacingDecoration horiSpacingDecoration = new HoriSpacingDecoration(Utils.convertDpToPixel(10,context));
holder.viewItem.addItemDecoration(horiSpacingDecoration);
adapterChart = new ChartItemAdapter(context);
holder.viewItem.setAdapter(adapterChart);
mItemsChart.clear();
holder.textView.setText(mBulan.get(position));
int dataTertinggi = Integer.parseInt(Collections.max(mItems));
int botol = dataTertinggi/5;
int ci = niceround(dataTertinggi);
Log.d(TAG, "onBindViewHolder: pembulatan " + ci);
ukuran = Integer.parseInt(mItems.get(position))/botol;
if(Integer.parseInt(mItems.get(position))%10 < botol)
{
ukuran2=1;
ukuran+=ukuran2;
}
else
{
ukuran2=1;
ukuran+=ukuran2;
} …Run Code Online (Sandbox Code Playgroud)