相关疑难解决方法(0)

RecyclerView中的单一选择

我知道在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)

android android-recyclerview

60
推荐指数
7
解决办法
8万
查看次数

滚动后回收器视图项目颜色更改重复

滚动后回收器视图项目颜色更改重复。

我曾经在 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)

android android-recyclerview

4
推荐指数
1
解决办法
3133
查看次数

notifyDataSetChanged() 在 recyclerview 上做什么?为什么每次我调用 notifyDataSetChanged() 时它都会不断添加新数据?

我正在尝试在我的 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)

android android-recyclerview

2
推荐指数
1
解决办法
2003
查看次数

标签 统计

android ×3

android-recyclerview ×3