android - 从recyclerview获取seekbar的位置?

标签 android android-recyclerview seekbar

这是一个快速问题,因为我的其他问题从未得到解答。我有一个 RecyclerView,它为每个项目 (CardView) 填充了一个 SeekBar。我想知道获得此 SeekBar 位置的最佳方法。

换句话说,如果 recyclerview 中有两个项目,每个项目都包含自己的 SeekBar,我如何区分第一个搜索栏和第二个搜索栏?

此外,如果这有帮助的话,所述 SeekBar 的监听器位于我的适配器中。

根据要求提供代码示例:

class ViewHolder extends RecyclerView.ViewHolder {
    private TextView mName, mUsername, mPercent;
    private SeekBar mSeekBar;

    ViewHolder(View itemView) {
        super(itemView);
        mName = (TextView) itemView.findViewById(R.id.name_view_members);
        mUsername = (TextView) itemView.findViewById(R.id.username_view_members);
        mPercent = (TextView) itemView.findViewById(R.id.percent_text);
        mSeekBar = (SeekBar) itemView.findViewById(R.id.percent_seekbar);
    }
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    GroupMembers individual = mMembers.get(position);
    holder.mName.setText(individual.getName());
    holder.mUsername.setText(individual.getUsername());

    //SeekBar Listener
    holder.mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            //Find out which SeekBar triggered the event
            int which = whichIsIt(seekBar.getId(), progress);

            //Stored progress (where is it at)
            int storedProgress = mAllProgress.get(which);

            /**Two cases can occur: User goes left or right with the thumb.
             * If RIGHT, we must check how much he's allowed to go in that
             * direction (based on other seekbars), and stop him before it's
             * too late. If LEFT, free up the space to allow the other seekbars.
             **/
            if (progress > storedProgress) {
                //How much remains based on all seekbars.
                int remaining = remaining();
                //If progress 100%, don't let user move. (overextend)
                if (remaining == 0) {
                    seekBar.setProgress(storedProgress);
                } else {
                    //Progress available, check the availability of others,
                    //and let the user move as long as it's below 100% total.
                    if (storedProgress + remaining >= progress) {
                        mAllProgress.set(which, progress);
                    } else {
                        mAllProgress.set(which, storedProgress + remaining);
                    }
                }
            } else if (progress <= storedProgress) {
                mAllProgress.set(which, progress);
            }
        }

        private int whichIsIt(int id, int progress) {
            holder.mPercent.setText(" " + progress + "%");
            return R.id.percent_seekbar;
        }

        private int remaining() {
            int remaining = TOTAL_AMOUNT;
            for (int i = 0; i < mAllProgress.size(); i++) {
                remaining -= mAllProgress.get(i);
            }
            if (remaining >= 100) {
                remaining = 100;
            } else if (remaining <= 0) {
                remaining = 0;
            }
            return remaining;
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    });

方法 whichIsIt 应确定正在触发 RecyclerView 的哪个 SeekBar

最佳答案

您可以为每个seekBar设置一个标签,并指定适配器中的位置seekBar.setTag(holderPosition);

因此,在方法 onProgressChanged(SeekBar seekBar,...) 中,您执行 seekBar.getTag()。这样您就可以在正确的位置更改数据。

P.S: 如果 OnSeekBarChangeListener 对于所有的seekBars 都是相同的,你可以用它创建一个私有(private)字段。 ;)

关于android - 从recyclerview获取seekbar的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477031/

相关文章:

java - 在android中调用View内部的View

java - 保存对象的属性

android - 如何在 CollapsingToolbarLayout 中滚动 Recyclerview

java - Android:SeekBar 小部件中的自定义 Drawable 正在绘制别名图像

android - 如果我的应用程序在 API 8 模拟器上运行,则互联网连接不起作用

java - Android Java 的 AJAX 等效项

android - 在 Android 的 RecyclerView 中检测动画完成

android - RecyclerView - 如何通过方向键/键盘选择项目

java - Android中的自定义SeekBar,仅在开始时触摸时允许前进

android - 在不丢失 SeekBar 焦点的情况下更新 ListView 行